방법 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 호출 없이도 깔끔하게 처리할 수 있습니다.