Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

자바(Java)에서 문자열 맨 앞에 다른 문자열 삽입하는 2가지 방법

방법 1: 문자 배열(Character Array)로 직접 조립하기

두 문자열의 문자를 하나씩 옮겨 담아 새로운 문자열을 만드는 가장 기본적인 방식입니다. 동작 원리를 이해하는 데 도움이 되며, 별도의 클래스 없이 순수 배열 연산만으로 처리할 수 있습니다.

  • 두 개의 문자열을 준비합니다. 원본 문자열을 str1, str1의 맨 앞에 삽입할 문자열을 str2라고 가정합니다.

  • 두 문자열 길이의 합(str1.length() + str2.length())을 크기로 하는 char 배열을 생성합니다.

  • 배열의 0번째 인덱스부터 차례대로 str2의 문자들을 채워 넣습니다.

  • (str2의 길이)번째 인덱스부터 배열 끝까지 str1의 문자들을 순서대로 채워 넣습니다.

  • 완성된 char 배열을 new String(charArray)로 변환해 최종 결과 문자열을 얻습니다.

예제 코드

import java.util.Scanner;
public class InsertStringExample {
    public static void main(String args[]) {
        System.out.println("Enter string1: ");
        Scanner sc = new Scanner(System.in);
        String str1 = sc.next();
        System.out.println("Enter string2: ");
        String str2 = sc.next();

        // 두 문자열 길이의 합만큼 char 배열 생성
        char[] charArray = new char[str1.length() + str2.length()];

        // 배열 앞부분에 str2의 문자 저장
        for (int i = 0; i < str2.length(); i++) {
            charArray[i] = str2.charAt(i);
        }

        // 그 뒤에 str1의 문자 저장
        for (int i = str2.length(); i < charArray.length; i++) {
            charArray[i] = str1.charAt(i - str2.length());
        }

        String result = new String(charArray);
        System.out.println(result);
    }
}

실행 결과

Enter string1:
krishna
Enter string2:
kasyap
kasyapkrishna

방법 2: StringBuffer 클래스 활용하기

자바는 문자열에 잦은 수정 작업이 필요할 때 String 대신 사용할 수 있는 StringBuffer 클래스를 제공합니다. StringBuffer 객체는 내부 버퍼를 통해 내용을 반복적으로 수정·조작해도 매번 새로운 불필요한 객체가 생성되지 않으므로, 메모리 사용량과 성능 면에서 유리합니다.

이 클래스에서 자주 사용되는 핵심 메서드는 다음과 같습니다.

  • append(): 전달받은 String 값을 현재 StringBuffer 객체의 끝에 추가합니다.
  • toString(): 현재 StringBuffer 객체의 내용을 String 형태로 반환합니다.

따라서 한 문자열을 다른 문자열의 시작 부분에 삽입하려면 아래 절차를 따르면 됩니다.

  • 원본 문자열 str1과 맨 앞에 붙일 문자열 str2를 준비합니다.

  • 빈 StringBuffer 객체를 생성합니다.

  • append() 메서드로 먼저 str2를 추가한 뒤, 이어서 str1을 추가합니다.

  • 마지막으로 toString() 메서드를 호출해 최종 결과 문자열을 얻습니다.

예제 코드

import java.util.Scanner;
public class StringBufferExample {
    public static void main(String args[]) {
        System.out.println("Enter string1: ");
        Scanner sc = new Scanner(System.in);
        String str1 = sc.next();
        System.out.println("Enter string2: ");
        String str2 = sc.next();

        StringBuffer sb = new StringBuffer();
        sb.append(str2);   // 앞에 붙일 문자열을 먼저 추가
        sb.append(str1);   // 원본 문자열을 뒤에 추가

        String result = sb.toString();
        System.out.println(result);
    }
}

실행 결과

Enter string1:
krishna
Enter string2:
kasyap
kasyapkrishna

참고: StringBuilder로 더 간결하게 처리하기

단일 스레드 환경이라면 동기화 오버헤드가 없는 StringBuilder를 사용하는 것이 좋습니다. 사용법은 StringBuffer와 거의 동일하며 일반적으로 더 나은 성능을 제공합니다. 특히 insert() 메서드를 활용하면 원하는 위치에 문자열을 한 줄로 삽입할 수 있습니다.

String result = new StringBuilder(str1).insert(0, str2).toString();

StringBuilder의 insert(int offset, String str) 메서드는 지정한 인덱스 위치(여기서는 0, 즉 맨 앞)에 문자열을 삽입하므로, 반복문이나 여러 단계의 append 호출 없이도 깔끔하게 처리할 수 있습니다.