🎈 1. springTokenizer VS split
- 문자열이 특정구분자로 (이를 Delimeter 라 한다.)로 연결되어 있으면 2가지 방법으로 문자열을 쪼갠다.
java.util.Tokenizer
String.split
- 1 과 2의 차이는 1은 정규표현식, 2는 문자로 구분을 한다는 것이다.
📍 1-1. split()
String test = "안녕하세요, 만나서-반가워요";
String[] tokens = test.split(",|-");
for (String token : tokens) {
System.out.println("token"+token);
}
📍 1-2. springTokenizer
String test = "안녕하세요, 만나서-반가워요";
StringTokenizer s = new StringTokenizer(test,"-");
int tokenCount = s.countTokens();
for (int i = 0; i <tokenCount ; i++) {
String tok = s.nextToken();
System.out.println("StringTokenizer"+tok);
}
- countTokens() : return int, 구분자로 구분된 토큰들의 갯수를 리턴
- nextToken() : return String, 다음 번 token 을 리턴.
🎈 2. springBuffer VS springBuilder
- springBuffer VS springBuilder 를 이용해 문자열을 합치는 이유는?
예를 들어 str = "ABC" 이고 "DEF" 를 합치기 위해 str+= "ABCDEF" 로 문자열 합치는 것이 가능하다.
하지만
이렇게 한경우 스택영역의 데이터 변수가 가리키는 주소값이 메모리영역의 "ABC"에서 새로 생성된 "ABCDEF"객체로 변경이 되는것이다. 즉 ABC 객체가 ABCDEF 로 바뀌는 것이 아니므로 , 이는 메모리의 낭비를 유도하고 프로그램 성능을 저하한다.
- 이런 이유로 아래의 두 클래스를 이용하여 내부 버퍼를 이용해 문자열 수정작업을 진행하므로 새 객체를 생성하지 않는다.!
이 두 클래스의 차이?
📍 2-1. springBuffer
- SpringBuffer 는 동기화가 적용되어 있어 멀티스레드에서 안전하다.
📍 2-2. springBuilder
- Builder 는 그렇지 않다.
- StringBuilder sb = new StringBuilder(); : 기본형
- StringBuilder sb = new StringBuilder(5); : 5 크기 만큼의 문자들을 저장할 수 있는 버퍼 생성. 자동으로 버퍼크기는 증가.
- StringBuilder sb = new StringBuilder("d36choi"); : 문자열이 주어지는 경우엔 이 매개값을 버퍼의 초기값으로 지정.
StringBuilder sb = new StringBuilder();
sb.append("hi");
sb.append(" i'm choi");
System.out.println(sb.toString());
sb.delete(0, 2);
System.out.println(sb.toString());
참고자료
https://choichumji.tistory.com/99