package com.tjoeun.textfileIO;
import java.text.DecimalFormat;
import java.util.Arrays;
import java.util.StringTokenizer;
public class StringTokenizerTest {
public static void main(String[] args) {
// String str = "010-123-4567";
//// split() 메소드는 인수로 지정된 구분자로 문자열을 분리해서 배열로 리턴한다.
// String[] phoneNo = str.split("-");
// System.out.println(Arrays.toString(phoneNo));
//
//// split() 메소드는 구분자를 2개 이상 지정할 수 없으므로 공백과 탭이 섞여있는
//// 데이터에 구분자를 공백만 지정하면 탭으로 구분된 데이터는 분리할 수 없다.
// str = "사과 배 복숭아 밤 대추";
// String[] data = str.split(" ");
// System.out.println(Arrays.toString(data));
// StringTokenizer 클래스는 사용자가 지정하는 구분자를 경계로 문자열을 분리한다.
// 구분자를 생략하면 공백과 탭을 기본 구분자로 사용하며, 구분자로 분리된 데이터를 token이라 한다.
// 문자열이 공백이나 탭으로 구분된 경우

String str1 = "사과 배 복숭아 밤 대추";
StringTokenizer st1 = new StringTokenizer(str1);
// hasMoreTokens() 메소드는 StringTokenizer 클래스 객체에 다음에 읽을 token이 있으면 true,
// 없으면 false를 리턴한다.
while (st1.hasMoreTokens()) { // 다음에 읽을 데이터(token)가 있는 동안 반복된다.
// nextToken() 메소드는 StringTokenizer 클래스 객체의 다음 token을 읽어들인다.
System.out.println(st1.nextToken());
}
System.out.println("=====================================");
// 문자열이 ","로 구분된 경우

String str2 = "사과,배,복숭아,밤,대추";
// StringTokenizer 클래스 생성자의 2번째 인수로 구분자를 지정할 수 있다.
StringTokenizer st2 = new StringTokenizer(str2, ",");
while (st2.hasMoreTokens()) {
System.out.println(st2.nextToken());
}
System.out.println("=====================================");
// 문자열이 ","와 "."로 구분된 경우

String str3 = "사과,배,복숭아.밤,대추";
// StringTokenizer 클래스 생성자의 2번째 인수로 구분자를 여러개 지정할 수 있다.
StringTokenizer st3 = new StringTokenizer(str2, ",.");
while (st3.hasMoreTokens()) {
System.out.println(st3.nextToken());
}
System.out.println("=====================================");

// 문자열이 "="와 ","로 구분된 경우
String str4 = "사과=1000,배=2000,복숭아=3000,밤=4000,대추=5000";
// StringTokenizer 클래스 생성자의 3번째 인수로 구분자를 token에 포함시키는 여부를 지정할 수 있다.
// 3번째 인수는 생략시 false가 기본값으로 구분자를 token에 포함시키지 않지만 true를 쓰면 구분자를
// token에 포함시킨다.
StringTokenizer st4 = new StringTokenizer(str4, ",=", true);
while (st4.hasMoreTokens()) {
System.out.println(st4.nextToken());
}
System.out.println("=====================================");
// 챌린지 과제!
String str5 = "사과=1000,배=2000,복숭아=3000,밤=4000,대추=5000,감=6000";
// str5를 가지고 사과(1,000원) 처럼 나오게 서식 설정해 보기
StringTokenizer st5 = new StringTokenizer(str5, ",=", true); // ","와 "="를 경계로 토큰설정
DecimalFormat df = new DecimalFormat("#,##0원"); // 숫자 서식
while (st5.hasMoreTokens()) { // st5에 토큰이 존재하는 동안 반복

String str = st5.nextToken(); // 토큰이
if (str.equals("=")) { // "="과 같다면
System.out.print("("); // "("를 출력하고
} else if (str.equals(",")) { // 그렇지 않고 ","와 같다면
System.out.println(")"); // ")"를 출력하고
} else { // 그렇지 않으면
try {
System.out.print(df.format(Integer.parseInt(str))); //토큰을 인수로 변환해서 숫자서식을 지정해서 출력한다
} catch (Exception e) { // 예외(인수로 변환할 수 없는 토큰(사과 배 복숭아 등등)가 존재)가 발생하면
System.out.print(str); // 문자열로 출력한다.
}
}
}
System.out.println(")");
}
}
'java&eclipse 코딩 알고리즘 > 20231214' 카테고리의 다른 글
| MemoList (0) | 2023.12.14 |
|---|---|
| MemoVO (0) | 2023.12.14 |
| TextFileReadTest2 (0) | 2023.12.14 |
| TextFileReadTest (0) | 2023.12.14 |
| TextFileWriteTest (0) | 2023.12.14 |