리트코드 String 관련 문제를 풀다가 문자열 인덱스에 접근해서 값을 변경하고 싶었는데 어떻게 하는지 몰르겠어서 찾아봄 ㅎ...
.toCharArray() 메서드를 사용하면 문자열을 char[] 로 변환해서 리턴을 해준다.
그렇다면 다시 이 배열을 문자열로 바꿔주고 싶다면? new String(배열) 을 해주면 된다..!
String str = "안녕하세요 baeksu 입니다.";
char[] charArr = str.toCharArray();
System.out.println("str = " + str);
charArr[0] = '강';
for (char ch : charArr) {
System.out.print(ch);
}
System.out.println();
String res = new String(charArr);
System.out.println("res = " + res);
java 에서 String 객체는 한번 생성이 되면 변경이 안되는 문자열이다. 그래서 뭔가 내부적으로 뭔가 메모리를 해제하고 다시 붙히고 이런작업을 하는거 같음. 이럴 때 StringBuilder 를 사용하면 될듯. 속도차이가 좀 나는구나...
StringBuffer 라는거도 있는데 얘는 동기화가 필요한 상황에서 써야 하는듯, 코테 볼때 StringBuilder 를 쓰면 될 듯?!
public class Main {
public static void main(String[] args) {
String str = "test";
int cnt = 100000;
String result = "";
long beforeTime = System.currentTimeMillis(); //코드 실행 전에 시간 받아오기
for (int i = 0 ; i< cnt ; i++){
result += str;
}
long afterTime = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기
long secDiffTime = (afterTime - beforeTime); //두 시간에 차 계산
System.out.println("String 시간차이(ms) : "+secDiffTime);
StringBuilder sb = new StringBuilder();
beforeTime = System.currentTimeMillis(); //코드 실행 전에 시간 받아오기
for (int i = 0 ; i< cnt ; i++){
sb.append(str);
}
String result2 = sb.toString();
afterTime = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기
secDiffTime = (afterTime - beforeTime); //두 시간에 차 계산
System.out.println("StringBuilder 시간차이(ms) : "+secDiffTime);
}
}