String str = "홍길동";
String str2 = "홍길동";
str이라는 저장공간에는 주소값을 가진다.
str2 와 str1은 같은 주소값을 가진다.
== 사용시 true 값을 얻을 수 있다.
str3 = new string("홍길동");
이때는 홍길동이라는 같은 문자열을 갖고있지만 새로운 객체를 생성한다.
String str1 = "홍길동 이순신 이순신 Tom 홍길동";
String str2 = " TOM 을지문덕 김유신 연개소문";
//1. 위의 문자열을 StringBuilder 변수 sb를 이용해서 하나의 문자열로 만들고,
//StringBuilder sb = new StringBuilder();
//sb.append(str1).append(str2);
StringBuilder sb = new StringBuilder(str1 + str2);
System.out.println("sb.toString() : " + sb.toString());
sb.toString() : 홍길동 이순신 이순신 Tom 홍길동 TOM 을지문덕 김유신 연개소문
//2-1. sb의 문자열을 빈칸(" ")을 구분자로 잘라서(이름만 추출) 화면 출력(데이터확인)
// (String.split() 또는 StringTokenizer 클래스 사용)
// 예) 홍길동 이순신 이순신 Tom 홍길동 TOM...
StringTokenizer stk = new StringTokenizer(sb.toString(), " ");
while (stk.hasMoreTokens()) {
String name = stk.nextToken();
System.out.print(name + " ");
}
홍길동 이순신 이순신 Tom 홍길동 TOM 을지문덕 김유신 연개소문
//2-2. 문자열을 저장할 수 있는 배열변수(names)에 저장
stk = new StringTokenizer(sb.toString(), " ");
String[] names = new String[stk.countTokens()]; //토큰갯수로 배열크기 지정
int idx = 0;
while (stk.hasMoreTokens()) {
//names[idx] = stk.nextToken();
//idx++;
names[idx++] = stk.nextToken();
}
System.out.println("names 배열 : " + Arrays.toString(names));
names 배열 : [홍길동, 이순신, 이순신, Tom, 홍길동, TOM, 을지문덕, 김유신, 연개소문]
//3. 배열에 있는 값을 구분자 콤마(,)로 구분하여 한라인에 출력(StringBuilder 사용)
// 예) 홍길동,이순신,이순신,Tom,홍길동,TOM...
StringBuilder sb2 = new StringBuilder();
for (String name : names) {
//System.out.print(name + ",");
sb2.append(name).append(",");
}
System.out.println("sb2 : " + sb2.toString());
sb2 : 홍길동,이순신,이순신,Tom,홍길동,TOM,을지문덕,김유신,연개소문,
보이듯이 콤마(,)가 마지막 문자에도 붙는다.
if문을 써서 마지막 문자에 콤마가 안붙게 만들수 있다.
sb2.setLength(0); //기존 객체(인스턴스) 재사용을 위한 크기 초기화
boolean isFirst = true;
for (String name : names) {
if (isFirst) {
//System.out.print(name);
sb2.append(name);
isFirst = false;
} else {
//System.out.print("," + name);
sb2.append(",").append(name);
}
}
System.out.println("sb2 : " + sb2);
sb2 : 홍길동,이순신,이순신,Tom,홍길동,TOM,을지문덕,김유신,연개소문
혹은
sb2.setLength(0);
if (names.length > 0) {
sb2.append(names[0]);
}
for (int i = 1; i < names.length; i++) {
sb2.append(",").append(names[i]);
}
System.out.println("sb2 : " + sb2);
위의 식도 같은 결과값을 가진다.
//4. 데이터의 첫글자만 추출해서 콤마(,)로 구분하여 한라인에 출력(StringBuilder 사용)
// 예) 홍,이,이,T,홍,T,을...
sb2.setLength(0); // 전체 데이터 삭제
if (names.length > 0) {
sb2.append(names[0].charAt(0));
}
for (int i = 1; i < names.length; i++) {
sb2.append(",").append(names[i].charAt(0));
}
System.out.println("sb2 : " + sb2);
sb2 : 홍,이,이,T,홍,T,을,김,연
//5. 배열의 문자열중 이름의 글자수가 4 이상인 값을 "인덱스번호:이름" 출력
// 예) 인덱스번호:을지문덕
sb2.setLength(0);
for (int i = 0; i < names.length; i++) {
if (names[i].length() >= 4) {
System.out.println(i + ":" + names[i]);
}
}
6:을지문덕
8:연개소문