Java/문자열

[Java]특정 위치의 문자 변경하는 방법

DevStory 2022. 8. 19.

특정 위치의 문자 변경하는 방법

문자열은 변경할 수 없는 클래스이므로, String 객체를 변경할 수 없습니다. 따라서, 특정 위치의 문자를 변경하기 위해서는 새로운 String 객체를 생성해야 합니다.

 

이번 포스팅은 문자열의 특정 위치에 있는 문자를 변경할 수 있는 몇 가지 방법을 소개합니다.


방법 1. substring 메서드

첫 번째 방법으로 String 클래스에서 제공하는 substring() 메서드를 사용하여 특정 위치의 문자를 변경할 수 있습니다.

 

특정 위치를 기준으로 문자열을 분리 후 분리된 문자열과 변경하려는 문자와 조합하여 새로운 문자열을 생성합니다.

 

다음 예제는 문자열 "Hello_ Java."에서 언더바(_)를 쉼표(,)로 변경합니다.

public static void main(String args[]) {
  String strValue = "Hello_ Java.";

  // 언더바(_)의 위치
  int findIndex = 5;

  System.out.println("[변경 전]");
  System.out.println(strValue);
  strValue = strValue.substring(0, findIndex) + ',' + strValue.substring(findIndex + 1);

  System.out.println("\n[변경 후]");
  System.out.println(strValue);
}

[실행 결과]

[변경 전]
Hello_ Java.

[변경 후]
Hello, Java.

만약, 문자의 특정 위치를 모르는 경우 문자 또는 문자열의 위치를 반환하는 indexOf(), lastIndexOf() 메서드와 조합하여 사용할 수 있습니다.

 

다음 예제는 indexOf() 메서드로 언더바의 위치를 찾은 후 문자를 변경합니다.

public static void main(String args[]) {
  String strValue = "Hello_ Java.";

  int findIndex = strValue.indexOf('_');

  System.out.println("[변경 전]");
  System.out.println(strValue);

  if(findIndex > 0) {
    strValue = strValue.substring(0, findIndex) + ',' 
            + strValue.substring(findIndex + 1);
  }
 
  System.out.println("\n[변경 후]");
  System.out.println(strValue);
}

[실행 결과]

[변경 전]
Hello_ Java.

[변경 후]
Hello, Java.

방법 2. StringBuilder 클래스

substring() 메서드를 사용하는 방법의 문제점은 새로운 문자열 객체를 Heap 영역에 생성하므로 메모리 낭비가 발생하며, 가비지 컬렉션이 처리해야 하는 작업이 늘어난다는 것입니다.

 

안전한 방법으로 StringBuilder 클래스를 사용하여 특정 위치의 문자를 변경할 수 있습니다.

 

StringBuilder 생성자에 문자열을 전달 후 StringBuilder 클래스에서 제공하는 setCharAt() 메서드로 특정 위치의 문자를 변경합니다.

 

StringBuilder 객체를 문자열로 변환하기 위해 toString() 메서드를 호출합니다.

public static void main(String args[]) {
  String strValue = "Hello_ Java.";
  StringBuilder sb = new StringBuilder(strValue);

  int findIndex = sb.indexOf("_");

  System.out.println("[변경 전]");
  System.out.println(strValue);

  if(findIndex > 0) {
    sb.setCharAt(findIndex, ',');
    strValue = sb.toString();
  }

  System.out.println("\n[변경 후]");
  System.out.println(strValue);
}

[실행 결과]

[변경 전]
Hello_ Java.

[변경 후]
Hello, Java.

방법 3. 문자 배열로 변환

마지막 방법으로 문자열을 문자 배열로 변환 후 문자를 변경합니다.

 

String 클래스에서 제공하는 toCharArray() 메서드를 사용하여 문자 배열로 변환 후 배열의 특정 위치를 접근 후 문자를 변경합니다.

 

문자 배열을 다시 문자열로 변환하기 위해 String 클래스에서 제공하는 valueOf() 메서드에 문자 배열을 전달합니다.

public static void main(String args[]) {
  String strValue = "Hello_ Java.";
  char[] charArray = strValue.toCharArray();

  int findIndex = strValue.indexOf("_");

  System.out.println("[변경 전]");
 System.out.println(strValue);
 
  if(findIndex > 0) {
    charArray[findIndex] = ',';
    strValue = String.valueOf(charArray);
  }
 
  System.out.println("\n[변경 후]");
  System.out.println(strValue);
}

[실행 결과]

[변경 전]
Hello_ Java.

[변경 후]
Hello, Java.
반응형

댓글