문자열 다루기

DeokHun KIM·2022년 7월 12일
0

java

목록 보기
15/30
String str = "홍길동";

String str2 = "홍길동";

str이라는 저장공간에는 주소값을 가진다.

str2 와 str1은 같은 주소값을 가진다.

== 사용시 true 값을 얻을 수 있다.

str3 = new string("홍길동");

이때는 홍길동이라는 같은 문자열을 갖고있지만 새로운 객체를 생성한다.
  • 문자열 다루기
    0.문자열 데이터
    String str1 = "홍길동 이순신 이순신 Tom 홍길동";
    String str2 = " TOM 을지문덕 김유신 연개소문";
    1. 위의 문자열을 StringBuilder 변수 sb를 이용해서 하나의 문자열로 만들고,
    2-1. sb의 문자열을 빈칸(" ")을 구분자로 잘라서(이름만 추출) 화면 출력(데이터확인)
    (String.split() 또는 StringTokenizer 클래스 사용)
    예) 홍길동 이순신 이순신 Tom 홍길동 TOM...
    2-2. 문자열을 저장할 수 있는 배열변수(names)에 저장
    3. 배열에 있는 값을 구분자 콤마(,)로 구분하여 한라인에 출력(StringBuilder 사용)
    예) 홍길동,이순신,이순신,Tom,홍길동,TOM...
    4. 데이터의 첫글자만 추출해서 콤마(,)로 구분하여 한라인에 출력(StringBuilder 사용)
    예) 홍,이,이,T,홍,T,을...
    5. 배열의 문자열중 이름의 글자수가 4 이상인 값을 "인덱스번호:이름" 출력
    예) 인덱스번호:을지문덕
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:연개소문

0개의 댓글