โ ์๋ฐ split / StringTokenizer - ๋ฌธ์์ด ์๋ฅด๊ธฐ ๋น๊ต
์๋ฐ ๋ฌธ์์ด ์๋ฅด๊ธฐ
์๋ฐ์์ ๋ฌธ์์ด์ ์๋ฅด๋๋ฐ ์ฌ์ฉํ๋ ๋ํ์ ์ธ ํด๋์ค๊ฐ String ํด๋์ค์ split ๋ฉ์๋์ StringTokenizer ํด๋์ค๊ฐ ์๋ค.
์ด๋ฒ ์๊ฐ์๋ ์ด ๋์ ์ฌ์ฉ ๋ฌธ๋ฒ์ ์์๋ณด๊ณ , ๋์ด ์ด๋ ํ ์ฐจ์ด์ ์ด ์๋์ง, ์ด๋จ๋ ์ด๋ ๊ฒ์ ์ฌ์ฉํด์ผ ํ๋์ง ์์๋ณด์.
String ํด๋์ค์ split ๋ฉ์๋
String ํด๋์ค์์ ์ ๊ณต๋๋ split ๋ฉ์๋๋ ๋งค๊ฐ๋ณ์ ๊ฐฏ์๊ฐ ๋ค๋ฅธ 2๊ฐ๋ก ์ค๋ฒ๋ก๋ฉ ๋์ด ์๋ค.
์๋ฐ์ split ๋ฉ์๋์ ๊ฐ์ฅ ํฐ ํน์ง์ ๊ตฌ๋ถ์๋ฅผ ๋ฌธ์๋ก ๋ฐ๋๊ฒ ์๋๋ผ ์ ๊ท์์ผ๋ก ๋ฐ๋๋ค๋ ์ ์ด๋ค.
์ ๊ท์์ด ๋์ด๋๊ฐ ์๋ ๋ถ๋ถ์ด๊ธด ํ์ง๋ง ๋๋ถ์ ๋ค์ฑ๋กญ๊ณ ์ญ์ธํ๊ฒ ๋ฌธ์์ด์ ์๋ฅผ ์ ์๋ค๋ ํน์ง์ด ์๋ค.
public String[] split(String regex);
// ๋ฐํ์ String ๋ฐฐ์ด๋ก ๋ฐ๋๋ค.
// ๊ตฌ๋ถ ๊ธฐํธ๋ฅผ ๋ฌธ์์ด์ด ์๋ ์ ๊ทํํ์์ผ๋ก ๋ฐ๋๋ค. (์ค์)
public String[] split(String regex, int limit);
// ๋ฌธ์์ด์ ์ ๊ท์์ ๋ง์ถฐ์ ๋ถ๋ฆฌํ๋๋ฐ limit๋งํผ ๋ฌธ์์ด์ ์๋ฅธ๋ค.
๋ง์ผ split์ ๋ฌธ์์ด ์๋ฅด๊ธฐ ๋์์ด ์คํจํ๋ฉด PatternSyntaxException ์์ธ(์ ๊ท์ ํจํด ์ค๋ฅ)๋ฅผ ๋ฐ์์ํจ๋ค.
๊ตฌ๋ถ์๋ก ๋ฌธ์์ด ๋ถ๋ฆฌํ๊ธฐ
String str = "inpa@tistory@com@super@power";
String[] splitter = str.split("@");
for (int i=0; i < splitter.length; i++) {
System.out.printf("%d์์น : %s\n", i, splitter[i]);
}
String str = "inpa@tistory@com@super@power";
// ๋ฌธ์์ด์ ์๋ฅด๋, ๋ฑ 3๋ฒ ๊น์ง๋ง ์๋ฅด๊ณ ๋ง์๋ผ
String[] splitter = str.split("@", 3); // limit ์ฌ์ฉ
for (int i=0; i < splitter.length; i++) {
System.out.printf("%d์์น : %s\n", i, splitter[i]);
}
์ฌ๋ฌ๊ฐ ๊ตฌ๋ถ์๋ก ๋ฌธ์์ด ๋ถ๋ฆฌํ๊ธฐ
์ ๊ท์ or๋ฅผ ์๋ฏธํ๋ ๋๊ดํธ๋ก ๊ฐ์ธ์ ๊ตฌ๋ถ์๋ก ์ฌ์ฉํ ํน์๋ฌธ์๋ฅผ ์ ์ด์ฃผ๋ฉด ๋๋ค.
String str = "hello-world%inpa@tistory#com";
String[] splitter = str.split("[%-@#]");
for (int i=0; i < splitter.length; i++) {
System.out.printf("%d์์น : %s\n", i, splitter[i]);
}
๊ตฌ๋ถ์์ ์ฌ์ฉํ ํน์ ๊ธฐํธ ์ฃผ์์
split ๋ฉ์๋๋ ์ ๊ทํํ์์ ๋งค๊ฐ๋ณ์๋ก ๋ฐ๊ธฐ ๋๋ฌธ์, ์ ๊ท์์ผ๋ก ์ด๋ฏธ ์ง์ ๋ ์ฝ์ ๊ธฐํธ๋ฅผ ์๋ฌด ์๊ฐ์์ด ์จ๋ฒ๋ฆฌ๋ฉด ์๋๋ค.
์๋ฅผ ๋ค์ด | ๊ธฐํธ๋ ์ ๊ท์์์ or์ ์๋ฏธํ๋๋ฐ ๋ฌดํฑ๋๊ณ ์ฌ์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋ํ๋๊ฒ ๋๋ค.
String str = "inpa|tistory|com|super|power";
String[] splitter = str.split("|");
for (int i=0; i < splitter.length; i++) {
System.out.printf("%d์์น : %s\n", i, splitter[i]);
}
๋ฐ๋ผ์ \\ ๋ก ์ด์ค์ผ์ดํ ์ฒ๋ฆฌํด์ ์ธ์๋ก ์ ๋ฌ ํด์ผ ํ๋ค.
String str = "inpa|tistory|com|super|power";
String[] splitter = str.split("\\|"); // ๋ฌธ์ | ๋ก ์๋ฅด๊ธฐ
for (int i=0; i < splitter.length; i++) {
System.out.printf("%d์์น : %s\n", i, splitter[i]);
}
System.out.println("\n---------------------------------\n");
String str2 = "inpa.tistory.com.super.power";
String[] splitter2 = str2.split("\\."); // ๋ฌธ์ . ๋ก ์๋ฅด๊ธฐ
for (int i=0; i < splitter2.length; i++) {
System.out.printf("%d์์น : %s\n", i, splitter2[i]);
}
StringTokenizer ํด๋์ค
StringTokenizer ํด๋์ค๋ ๋ฌธ์์ด์ ๊ตฌ๋ถ์(delimiter)๋ฅผ ๊ธฐ์ค์ผ๋ก ํ ํฐ(token)์ด๋ผ๋ ์ฌ๋ฌ ๊ฐ์ ๋ฌธ์์ด๋ก ์๋ผ๋ด๋๋ฐ ์ฌ์ฉํ๋ค.
๋ง์ผ ๊ตฌ๋ถ์๋ฅผ ๋๊ฒจ์ฃผ์ง ์์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ์ผ๋ก ๊ณต๋ฐฑ์ผ๋ก ์ค์ ๋์ด ๋ฌธ์์ด์ ์๋ฅด๊ฒ ๋๋ค.
// ๋ฌธ์์ด์ ๊ณต๋ฐฑ ๋ฌธ์๋ฅผ ๊ตฌ๋ถ์๋ก ์๋ฅด๊ธฐ
new StringTokenizer(String str)
// ๋ฌธ์์ด์ ๋งค๊ฐ๋ณ์๋ก ์ง์ ๋ ๊ตฌ๋ถ์(delim)๋ก ์๋ฅด๊ธฐ
// ์ด๋ ๊ตฌ๋ถ์๋ ํ ํฐ์ผ๋ก ๊ฐ์ฃผ๋์ง ์์
new StringTokenizer(String st, String delim)
// ๋ฌธ์์ด์ ๋งค๊ฐ๋ณ์๋ก ์ง์ ๋ ๊ตฌ๋ถ์(delim)๋ก ์๋ฅด๊ธฐ
// returnDelims ์ ๊ฐ์ true๋กํ๋ฉด ๊ตฌ๋ถ์๋ ํ ํฐ์ผ๋ก ๊ฐ์ฃผ
new StringTokenizer(String str, String delim, boolean returnDelims)
์์ ๊ณผ์ ์ผ๋ก ๋ง๋ค์ด์ง ๊ฒฐ๊ณผ๋ฌผ์ ๋ฐฐ์ด์ด ์๋, ๊ตฌ๋ถ์์ ๋ฐ๋ผ ๋๋์ด์ง ๋ฌธ์์ด์ ํ ํฐ์ ๊ฐ๊ณ ์๊ฒ ๋๋ค.
๊ฐ๋ฐ์๋ ์ด๋ฌํ ํ ํฐ์ ๊บผ๋ด์์ StringTokenizer์์ ์ง์ํ๋ ๋ฉ์๋๋ก ์ํ๋ ๋ฐฉ์์ผ๋ก ๋ฌธ์์ด์ ๊ฐ๊ณตํด์ผ ํ๋ ์์ผ๋ก split ๊ณผ๋ ์ฌ์ฉ๋ฐฉ๋ฒ์ ์ฐจ์ด๊ฐ ์๋ค.
StringTokenizer ๋ฉ์๋ | ์ค ๋ช |
int countTokens( ) | ์ ์ฒด ํ ํฐ์ ์๋ฅผ ๋ฐํ |
boolean hasMoreTokens( ) boolean hasMoreElements() |
ํ ํฐ์ด ๋จ์์๋์ง ์๋ ค์ค |
String nextToken( ) | ๋ค์ ํ ํฐ์ ๋ฐํ |
๊ตฌ๋ถ์๋ก ๋ฌธ์์ด ๋ถ๋ฆฌํ๊ธฐ
// 1. delim์ default๋ก ์ค์ .
String str1 = "Wellcome to The Java HelloWorld";
StringTokenizer st = new StringTokenizer(str1);
System.out.println("- str1์ ํ ํฐ ๊ฐ์ : " + st.countTokens());
while (st.hasMoreTokens()) {
System.out.println(st.nextToken());
}
// 2. delim์ '%'๋ก ์ค์ .
String str2 = "Wellcome%to%The%Java%HelloWorld";
StringTokenizer st = new StringTokenizer(str2, "%");
System.out.println("- str2์ ํ ํฐ ๊ฐ์ : " + st.countTokens());
while (st.hasMoreTokens()) {
System.out.println(st.nextToken());
}
์ฌ๋ฌ๊ฐ ๊ตฌ๋ถ์๋ก ๋ฌธ์์ด ๋ถ๋ฆฌํ๊ธฐ
๋ง์ผ ๊ตฌ๋ถ์๋ฅผ ์ฌ๋ฌ๊ฐ ์ธ์์์ผ ๋ฌธ์์ด์ ์๋ฅด๊ณ ์ถ๋ค๋ฉด "%/*" ์ ๊ฐ์ด ์ฌ๋ฌ ๊ฐ์ ๊ธฐ์ค์ ํ ๋ฒ์ ๋ฃ์ด ์ฃผ๋ฉด ๋๋ค.
๋จ, ๊ธฐ์ค์ ๋ฌด์กฐ๊ฑด 1์๋ฆฌ ๋ฌธ์์ด์ด์ผ ํ๋ค๋ ์ ์ ์ฃผ์ํ์.
// 3. delim์ '%', '/', '*'๋ก ์ค์ .
String str3 = "Wellcome%to/The%Java*HelloWorld";
StringTokenizer st = new StringTokenizer(str3, "%/*");
System.out.println("- str3์ ํ ํฐ ๊ฐ์ : " + st.countTokens());
while (st.hasMoreTokens()) {
System.out.println(st.nextToken());
}
๊ตฌ๋ถ์๋ ํ ํฐ์ผ๋ก ํฌํจ์์ผ ๋ถ๋ฆฌํ๊ธฐ
๊ตฌ๋ถ์๋ฅผ ๋ฌธ์์ด ์๋ฅด๋๋ฐ์ ์ฌ์ฉ๋๋ ๊ฒ ๋ฟ๋ง ์๋๋ผ ํ ํฐ์ผ๋ก๋ ์ง์ ํ ์๋ ์๋ค.
String str4 = "Wellcome%to%The%Java%HelloWorld";
// %๋ฅผ ๊ตฌ๋ถ์๋ก์ ์ญํ ๋ฟ๋ง ์๋๋ผ ์ถ๋ ฅ๋๋๋ก ์ค์
StringTokenizer st = new StringTokenizer(str4, "%", true); // 3๋ฒ์งธ ์ธ์๋ฅผ true๋ก
System.out.println("- str4์ ํ ํฐ ๊ฐ์ : " + st.countTokens());
while (st.hasMoreTokens()) {
System.out.println(st.nextToken());
}
๊ตฌ๋ถ์ ์ค๊ฐ์ ์ฌ์ค์ ํ๊ธฐ
StringTokenizer์ ๊ฐ์ฅ ํฐ ํน์ง์ ์ค๊ฐ์ ๊ตฌ๋ถ์๋ฅผ ์๋ก ์ค์ ํ ์ ์๋ค๋ ์ ์ด๋ค.
// 4. delim์ '%'์ผ๋ก ์ค์ ํ์ฌ ์ถ๋ ฅํ๋ค๊ฐ, delim์ '&'๋ก ์ฌ์ค์ ํ๊ณ ์ถ๋ ฅ.
String str4 = "Wellcome%%to%&The&Java&HelloWorld";
StringTokenizer st = new StringTokenizer(str4, "%");
System.out.println("- str4์ ํ ํฐ ๊ฐ์ (delim : '%') : " + st.countTokens());
System.out.println(st.nextToken());
System.out.println(st.nextToken());
System.out.println(st.nextToken("&")); // ๊ตฌ๋ถ์ ์ฌ์ค์
System.out.println("- str4์ ํ ํฐ ๊ฐ์ (delim : '&') : " + st.countTokens());
System.out.println(st.nextToken());
System.out.println(st.nextToken());
System.out.println(st.nextToken());
Split vs StringTokenizer ์ฐจ์ด์
- ๋จผ์ split ๋ฉ์๋๋ Stringํด๋์ค์ ์ํด์๋ ๋ฉ์๋์ด๊ณ , StringTokenizer๋ java.util์ ํฌํจ๋์ด ์๋ ํด๋์ค์ด๋ค.
- ๊ตฌ๋ถ์๋ฅผ split๋ ์ ๊ท ํํ์์ผ๋ก ๊ตฌ๋ถํ๊ณ , StringTokenizer๋ ๋ฌธ์๋ก ๋ฐ๋๋ค.
- split๋ ๊ฒฐ๊ณผ ๊ฐ์ด ๋ฌธ์์ด ๋ฐฐ์ด์ด์ง๋ง, stringtokenizer๋ ๊ฐ์ฒด์ด๋ค.
- split๋ ๋น๋ฌธ์์ด์ ํ ํฐ์ผ๋ก ์ธ์ํ๋ ๋ฐ๋ฉด, StringTokenizer๋ ๋น ๋ฌธ์์ด์ ํ ํฐ์ผ๋ก ์ธ์ํ์ง ์๋๋ค. (๋ค์ ์ฝ๋ ์์ )
- ์ฑ๋ฅ์ split ๋ณด๋ค StringTokenizer ๊ฐ ์ข๋ค.
split์ ๋ฐ์ดํฐ๋ฅผ ํ ํฐ์ผ๋ก ์๋ผ๋ธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐฐ์ด์ ๋ด์์ ๋ฐํํ๊ธฐ ๋๋ฌธ์ StringTokenizer ๋ณด๋ค ์ฑ๋ฅ์ด ๋จ์ด์ง๋ค.
๊ทธ๋ฌ๋ ๋ฐ์ดํฐ์ ์์ด ๋ง์ ๊ฒฝ์ฐ๊ฐ ์๋๋ผ๋ฉด ๋ณ ๋ฌธ์ ๊ฐ ๋์ง ์๋๋ค.
๋ค์์ ๊ตฌ๋ถ์๋ฅผ , ๋ก ํ๋ ๋ฌธ์์ด ๋ฐ์ดํฐ๋ฅผ String ํด๋์ค์ split() ๊ณผ StringTokenizer ๋ก ์๋ผ๋ธ ๊ฒฐ๊ณผ๋ฅผ ๋น๊ตํ๋ ์์ ์ด๋ค.
split() ์ ๋น ๋ฌธ์์ด๋ ํ ํฐ์ผ๋ก ์ธ์ํ๋ ๋ฐ๋ฉด, StringTokenizer๋ ๋น ๋ฌธ์์ด์ ํ ํฐ์ผ๋ก ์ธ์ํ์ง ์๊ธฐ ๋๋ฌธ์ ํ ํฐ ๊ฐ์์ ์ฐจ์ด๊ฐ ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
String data = "100,,,200,300";
// split์ ๋น๋ฌธ์ ๊น์ง ํ ํฐ์ผ๋ก ์ธ์ํ์ฌ ์ ์ฅํ๋ค.
String[] result = data.split(",");
for (int i = 0; i < result.length; i++) {
System.out.print(result[i] + "|"); // ๋น๋ฌธ์๋ฅผ ๊ตฌ๋ถํ๊ธฐ ์ํด | ๋ฌธ์๋ฅผ ์ถ๋ ฅ
}
System.out.printf("%nsplit()์ ๊ฐ์ : " + result.length + "%n%n");
// StringTokenizer ๋น๋ฌธ์๋ ํ ํฐ์ผ๋ก ์ธ์ํ์ง ์๋๋ค.
StringTokenizer st = new StringTokenizer(data, ",");
int countTokens = st.countTokens(); // ์ ์ฒด ํ ํฐ์ ์๋ฅผ ๋ฐํ
for (int j = 0; st.hasMoreElements(); j++) {
System.out.print(st.nextToken() + "|"); // ๋น๋ฌธ์๋ฅผ ๊ตฌ๋ถํ๊ธฐ ์ํด | ๋ฌธ์๋ฅผ ์ถ๋ ฅ
}
System.out.printf("%nStringTokenizer๊ฐ์ : " + countTokens);