ํ๋ก๊ทธ๋๋จธ์ ์์
์์๋ ์ผ๋ถ ์์
์ด๋ ํด๋น ๊ตฌ์ฑ ์์๊ฐ ๋ฐ๋ณต๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์ค๋ ์ ๋ Java ๊ฐ๋ฐ์์ ์ผ์ ์
๋ฌด์์ ์์ฃผ ์ ํ๊ฒ ๋๋ ์ฃผ์ ๋ฅผ ๋ค๋ฃจ๊ณ ์ถ์ต๋๋ค. ํน์ ๋ฉ์๋๋ก๋ถํฐ ํน์ ๋ฌธ์์ด์ ๋ฐ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ ๊ดํ ๋ชจ๋ ๊ฒ์ด ์ข์ ๊ฒ ๊ฐ์ง๋ง ๋น์ ์๊ฒ ์ด์ธ๋ฆฌ์ง ์๋ ์์ ๊ฒ์ด ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๊ตฌ๋ถ ๊ธฐํธ๊ฐ ์ ํฉํ์ง ์๊ณ ๋ค๋ฅธ ๊ฒ์ด ํ์ํ๊ฑฐ๋ ์ ํ ํ์ํ์ง ์์ต๋๋ค. ๊ทธ๋ฌํ ์ํฉ์์ ๋ฌด์์ ํ ์ ์์ต๋๊น?
replace
๋น์ฐํ ํด๋์ค์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ญ์์ค String
.
์๋ฐ ๋ฌธ์์ด ๋ฐ๊พธ๊ธฐ
์ ํ ๊ฐ์ฒด์๋String
๊ต์ฒด ๋ฐฉ๋ฒ์ ๋ค ๊ฐ์ง ๋ณํ์ด ์์ต๋๋ค replace
.
replace(char, char);
replace(CharSequence, CharSequence);
replaceFirst(String, String);
replaceAll(String, String).
replace(char, char)
String replace(char oldChar, char newChar)
- ์ฒซ ๋ฒ์งธ ์ธ์์ ๋ชจ๋ ๋ฌธ์๋ฅผ oldChar
๋ ๋ฒ์งธ ์ธ์๋ก ๋ฐ๊ฟ๋๋ค - newChar
. ์ด ์์์๋ ์ผํ๋ฅผ ์ธ๋ฏธ์ฝ๋ก ์ผ๋ก ๋ฐ๊ฟ๋๋ค.
String value = "In JavaRush, Diego the best, Diego is Java God".replace(',', ';');
System.out.println(value);
์ฝ์ ์ถ๋ ฅ:
In JavaRush; Diego the best; Diego is Java God
2.replace(CharSequence, CharSequence)
์ง์ ๋ ๋ฌธ์ ์ํ์ค์ ์ผ์นํ๋ ๋ฌธ์์ด์ ๊ฐ ํ์ ๋ฌธ์์ด์ ๋์ฒด ๋ฌธ์ ์ํ์ค๋ก ๋ฐ๊ฟ๋๋ค.
String value = "In JavaRush, Diego the best, Diego is Java God".replace("Java", "Rush");
System.out.println(value);
๊ฒฐ๋ก :
In RushRush, Diego the best, Diego is Rush God
3.replaceFirst(String, String)
String replaceFirst(String regex, String replacement)
- ์ง์ ๋ ์ ๊ท์๊ณผ ์ผ์นํ๋ ์ฒซ ๋ฒ์งธ ํ์ ๋ฌธ์์ด์ ๋์ฒด ๋ฌธ์์ด๋ก ๋ฐ๊ฟ๋๋ค. ์ ํจํ์ง ์์ ์ ๊ท ํํ์์ ์ฌ์ฉํ๋ฉด PatternSyntaxException์ด ๋ฐ์ํ ์ ์์ต๋๋ค (์ด๋ ์ข์ง ์์ต๋๋ค). ์ด ์์์๋ ์ฑํผ์ธ ๋ก๋ด์ ์ด๋ฆ์ ๋ฐ๊พธ๊ฒ ์ต๋๋ค.
String value = "In JavaRush, Diego the best, Diego is Java God".replaceFirst("Diego", "Amigo");
System.out.println(value);
์ฝ์ ์ถ๋ ฅ:
In JavaRush, Amigo the best, Diego is Java God
๋ณด์๋ค์ํผ, "Diego"์ ์ฒซ ๋ฒ์งธ ํญ๋ชฉ๋ง ๋ณ๊ฒฝ๋์์ง๋ง ํ์ ํญ๋ชฉ์ ๊ทธ๋๋ก ๋จ์ ์์ต๋๋ค. ์ฆ, ๊ทธ๋๋ก ์ ์ง๋ฉ๋๋ค. 4. replaceAll()
Java์์ - ์ด ๋ฐฉ๋ฒ์ ๋ฌธ์์ด String replaceAll(String regex, String replacement)
์ ๋ชจ๋ ํ์ ๋ฌธ์์ด์ . ์ ๊ท์์ ์ฒซ ๋ฒ์งธ ์ธ์๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค . ์๋ฅผ ๋ค์ด, ์ด๋ฆ์ ์ฌ์ฉํ์ฌ ์ด์ ๊ต์ฒด๋ฅผ ์ํํ๊ณ ์๋ก์ด ๋ฉ์๋๋ฅผ ์ฌ์ฉํด ๋ณด๊ฒ ์ต๋๋ค. regex
replacement
regex
String value = "In JavaRush, Diego the best, Diego is Java God".replaceAll("Diego", "Amigo");
System.out.println(value);
์ฝ์ ์ถ๋ ฅ:
In JavaRush, Amigo the best, Amigo is Java God
๋ณด์๋ค์ํผ ๋ชจ๋ ๊ธฐํธ๊ฐ ํ์ํ ๊ธฐํธ๋ก ์์ ํ ๋์ฒด๋์์ต๋๋ค. Amigo๊ฐ ๊ธฐ๋ปํ ๊ฒ ๊ฐ์์ =)
์ ๊ท ํํ์
์์์๋ ์ ๊ท์์ ์ฌ์ฉํ์ฌ ๋์ฒด๊ฐ ๊ฐ๋ฅํ๋ค๊ณ ๋งํ์ต๋๋ค. ๋จผ์ ์ ๊ท ํํ์์ด ๋ฌด์์ธ์ง ์ค์ค๋ก ๋ช ํํ ํด ๋ด ์๋ค. ์ ๊ท์์ ๋ฉํ๋ฌธ์(์์ผ๋์นด๋) ์ฌ์ฉ์ ๊ธฐ๋ฐ์ผ๋ก ํ ์คํธ์ ํ์ ๋ฌธ์์ด์ ๊ฒ์ํ๊ณ ์กฐ์ํ๊ธฐ ์ํ ๊ณต์ ์ธ์ด์ ๋๋ค. ๊ฐ๋จํ ๋งํด์ ๊ฒ์ ๊ท์น์ ์ ์ํ๋ ๋ฌธ์ ๋ฐ ๋ฉํ ๋ฌธ์์ ํจํด์ ๋๋ค. ์:\D
- ๋์งํธ์ด ์๋ ๋ฌธ์๋ฅผ ์ค๋ช
ํ๋ ํ
ํ๋ฆฟ. \d
โ ๋ก ์ค๋ช
ํ ์๋ ์๋ ์ซ์๋ฅผ ์ ์ํฉ๋๋ค [0-9]
. [a-zA-Z]
โ a๋ถํฐ z๊น์ง ๋ผํด ๋ฌธ์๋ฅผ ์ค๋ช
ํ๋ ํ
ํ๋ฆฟ์ด๋ฉฐ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์์ต๋๋ค. replaceAll
ํด๋์ค ๋ฉ์๋ ์ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ณ ๋ คํ์ญ์์ค String
.
String value = "In JavaRush, Diego the best, Diego is Java God".replaceAll("\\s[a-zA-Z]{5}\\s", " Amigo ");
System.out.println(value);
์ฝ์ ์ถ๋ ฅ:
In JavaRush, Amigo the best, Amigo is Java God
\\s[a-zA-Z]{5}\\s
โ ๊ณต๋ฐฑ์ผ๋ก ๋๋ฌ์ธ์ธ 5๊ฐ์ ๋ผํด ๋ฌธ์๋ก ๊ตฌ์ฑ๋ ๋จ์ด๋ฅผ ์ค๋ช
ํฉ๋๋ค. ๋ฐ๋ผ์ ์ด ํ
ํ๋ฆฟ์ ์ฐ๋ฆฌ๊ฐ ์ ๋ฌํ ๋ฌธ์์ด๋ก ๋์ฒด๋ฉ๋๋ค.
Java ์ ๊ท์ ๋ฐ๊พธ๊ธฐ
๊ธฐ๋ณธ์ ์ผ๋ก Java์์ ์ ๊ท์์ ์ฌ์ฉํ๋ ค๋ฉดjava.util.regex
. ์ฃผ์ ํด๋์ค๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
Pattern
- ์ ๊ท์์ ์ปดํ์ผ๋ ๋ฒ์ ์ ์ ๊ณตํ๋ ํด๋์ค์ ๋๋ค.Matcher
โ ์ด ํด๋์ค๋ ํจํด์ ํด์ํ๊ณ ์์ ๋ ๋ฌธ์์ด์์ ์ผ์น ํญ๋ชฉ์ ํ์ธํฉ๋๋ค.
Matcher
๋ ๊น์ Pattern
?
Pattern pattern = Pattern.compile("\\s[a-zA-Z]{5}\\s");
Matcher matcher = pattern.matcher("In JavaRush, Diego the best, Diego is Java God");
String value = matcher.replaceAll(" Amigo ");
System.out.println(value);
๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ์ ๊ฒฐ๋ก ์ ๋์ผํ ๊ฒ์
๋๋ค:
In JavaRush, Amigo the best, Amigo is Java God
์ด ๊ธฐ์ฌ์์ ์ ๊ท์์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ฝ์ ์ ์์ต๋๋ค .
replacementAll์ ๋์
replace
๊ทธ ๋ฐฉ๋ฒ์ด ๋งค์ฐ ์ธ์์ ์ด๋ผ๋ ๊ฒ์ ์์ฌ์ ์ฌ์ง๊ฐ ์์ง๋ง ๊ทธ๊ฒ์ด ๊ฐ์ฒด๋ผ๋ String
์ฌ์ค , ์ฆ ์์ฑ ํ์๋ ๋ณ๊ฒฝํ ์ ์๋ค๋ ์ฌ์ค์ ๋ฌด์ํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ์์ด์ ์ผ๋ถ๋ฅผ ๊ต์ฒดํ ๋ ๊ฐ์ฒด๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ๋งค๋ฒ ํ์ํ ๋ด์ฉ์ผ๋ก ์ ๊ฐ์ฒด๋ฅผ ์์ฑํฉ๋๋ค. ํ์ง๋ง ๋งค๋ฒ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ค๋ฉด ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ์ง ์๋์? ํนํ ์ง๋ฌธ์ด ๋ช ๊ฐ ๊ฐ์ฒด๊ฐ ์๋๋ผ ๋ช ๋ฐฑ ๊ฐ, ์ฌ์ง์ด ์์ฒ ๊ฐ์ผ ๊ฒฝ์ฐ์๋ ๋์ฑ ๊ทธ๋ ์ต๋๋ค. ์๋ฆฌ๋๋ฆฌ, ๋น์ ์ ๋์์ ๋ํด ์๊ฐํ๊ธฐ ์์ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ์๊ฒ๋ ์ด๋ค ๋์์ด ์์ต๋๊น? ํ ... ํด๋น ์์ฑ ์ ๊ดํด์๋ ์ฆ์ ๋์์ด ์๊ฐ๋์ง๋ง StringBuilder/StringBuffer ๋ ๊ทธ๋ ์ง ์์ต๋๋ค . ์ฐ๋ฆฌ๊ฐ ๊ธฐ์ตํ๋ ๊ฒ์ฒ๋ผ ์ด๋ฌํ ํด๋์ค๋ ๋ค์ค ์ค๋ ๋ ํ๊ฒฝ์์ ์ฌ์ฉํ๋๋ก ์ต์ ํ๋์ด ์์ผ๋ฏ๋ก ๋จ์ผ ์ค๋ ๋ ์ฌ์ฉ์์ ๋ค์ ๋น ๋ฅด๊ฒ ์๋ํ๋ค๋ ์ ์ ์ ์ธํ๋ฉด ์ค์ ๋ก ๋ค๋ฅด์ง ์์ต๋๋ค . ์ด๋ฅผ ๋ฐํ์ผ๋ก ์ค๋ ์ฐ๋ฆฌ๋ ์ด ํด๋์ค์๋ ๋ง์ ํฅ๋ฏธ๋ก์ด ๋ฉ์๋๊ฐ ์์ง๋ง ํนํ ์ง๊ธ ์ฐ๋ฆฌ๋ ์ ๊ด์ฌ์ด ์์ต๋๋ค . โ ์ด ๋ฉ์๋๋ ์ด ์ํ์ค์ ํ์ ๋ฌธ์์ด์ ์๋ ๋ฌธ์๋ฅผ ์ง์ ๋ ๋ฌธ์์ด์ ์๋ ๋ฌธ์๋ก ๋ฐ๊ฟ๋๋ค. ํ์ ๋ฌธ์์ด์ ์ง์ ๋ ์์ ๋ถ๋ถ์์ ์์ํ์ฌ ์ธ๋ฑ์ค ๋์ ์๋ ๋ฌธ์๊น์ง ๋๋ ํด๋น ๋ฌธ์๊ฐ ์๋ ๊ฒฝ์ฐ ์ํ์ค ๋๊น์ง ๊ณ์๋ฉ๋๋ค. ์๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค: String
immutable
replace
String
String
immutable
immutable
StringBuffer
StringBuilder
StringBuilder.
replace
StringBuilder replace(int start, int end, String str)
-1
StringBuilder strBuilder = new StringBuilder("Java Rush");
strBuilder.replace(5, 9, "God");
System.out.println(strBuilder);
๊ฒฐ๋ก :
Java God
๋ณด์๋ค์ํผ, ๋ฌธ์์ด์ ์ฐ๋ ค๋ ๊ฐ๊ฒฉ์ ์ง์ ํ๊ณ ๊ฐ๊ฒฉ์ ์๋ ๊ฒ ์์ ํ์ ๋ฌธ์์ด์ ์๋๋ค. ๋ฐ๋ผ์ ๋์๋ง์ ์ฌ์ฉํ์ฌ ํด๋น StringBuilder
๋ฐฉ๋ฒ๊ณผ ์ ์ฌํ ๋ฐฉ๋ฒ์ ๋ค์ ์์ฑํ๊ฒ ์ต๋๋ค replaceall java
. ์ด๋ป๊ฒ ๋ณด์ผ๊น์?
public static String customReplaceAll(String str, String oldStr, String newStr) {
if ("".equals(str) || "".equals(oldStr) || oldStr.equals(newStr)) {
return str;
}
if (newStr == null) {
newStr = "";
}
final int strLength = str.length();
final int oldStrLength = oldStr.length();
StringBuilder builder = new StringBuilder(str);
for (int i = 0; i < strLength; i++) {
int index = builder.indexOf(oldStr, i);
if (index == -1) {
if (i == 0) {
return str;
}
return builder.toString();
}
builder = builder.replace(index, index + oldStrLength, newStr);
}
return builder.toString();
}
์ธ๋ป ๋ณด๋ฉด ๋ฌด์ญ์ง๋ง ์กฐ๊ธ๋ง ์ดํดํ๋ฉด ๋ชจ๋ ๊ฒ์ด ๊ทธ๋ ๊ฒ ๋ณต์กํ์ง ์๊ณ ๋
ผ๋ฆฌ์ ์ด์ง ์๋ค๋ ๊ฒ์ ์ดํดํ ์ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ธ ๊ฐ์ง ์ฃผ์ฅ์ ๊ฐ์ง๊ณ ์์ต๋๋ค:
str
โ ์ผ๋ถ ํ์ ๋ฌธ์์ด์ ๊ต์ฒดํ๋ ค๋ ๋ผ์ธ;oldStr
โ ๊ต์ฒดํ ๋ถ๋ถ ๋ฌธ์์ด์ ํํnewStr
- ์ฐ๋ฆฌ๊ฐ ๊ทธ๊ฒ์ ๋์ฒดํ ๊ฒ.
if
ํ์ํ๋ฉฐ , ๋ฌธ์์ด str
์ด ๋น์ด ์๊ฑฐ๋ oldStr
์ ํ์ ๋ฌธ์์ด์ด newStr
์ด์ ํ์ ๋ฌธ์์ด๊ณผ ๊ฐ์ผ๋ฉด oldStr
๋ฉ์๋ ์คํ์ ์๋ฏธ๊ฐ ์์ต๋๋ค. ๋ฐ๋ผ์ ์๋ ๋ฌธ์์ด - ์ ๋ฐํํฉ๋๋ค str
. newStr
๋ค์ ์ผ๋ก ๋ฅผ ํ์ธ null
ํ๊ณ , ์ด ๊ฒฝ์ฐ๋ผ๋ฉด ๋ ํธ๋ฆฌํ ๋น ๋ฌธ์์ด ํ์์ธ ์ผ๋ก ๋ณํํฉ๋๋ค ""
. ๊ทธ๋ฐ ๋ค์ ํ์ํ ๋ณ์ ์ ์ธ์ด ์์ต๋๋ค.
- ์ด ๋ฌธ์์ด ๊ธธ์ด
str
; - ํ์ ๋ฌธ์์ด ๊ธธ์ด
oldStr
; StringBuilder
๊ณต์ ๋ฌธ์์ด์ ๊ฐ์ฒด .
StringBuilder
๊ด์ฌ indexOf
์๋ ํ์ ๋ฌธ์์ด์ด ์ฒ์ ๋ํ๋๋ ์ธ๋ฑ์ค๋ฅผ ์ฐพ์ต๋๋ค. ๋ถํํ๊ฒ๋ indexOf
์ ๊ท์์์๋ ์๋ํ์ง ์์ผ๋ฏ๋ก ์ต์ข
๋ฐฉ๋ฒ์ ๋ฌธ์์ด ๋ฐ์์๋ง ์๋ํฉ๋๋ค(( ์ด ์ธ๋ฑ์ค๊ฐ ์ ๊ฐ์ผ๋ฉด -1
ํ์ฌ ๊ฐ์ฒด์์ ์ด๋ฌํ ๋ฐ์์ด ๋ ์ด์ ๋ฐ์ํ์ง ์์ต๋๋ค StringBuilder
. ๊ทธ๋์ ์ฐ๋ฆฌ๋ ๊ด์ฌ ์๋ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ง๊ณ ๋ฉ์๋๋ฅผ ์ข
๋ฃํฉ๋๋ค: ๊ทธ๊ฒ์ ์ฐ๋ฆฌ์ ์ ํฌํจ๋์ด ์์ผ๋ฉฐ , ์ด๋ฅผ ๋ฅผ ์ฌ์ฉํ์ฌ StringBuilder
๋ก ๋ณํํฉ๋๋ค . ๋ฃจํ์ ์ฒซ ๋ฒ์งธ ๋ฐ๋ณต์์ ์ธ๋ฑ์ค๊ฐ ๋์ผํ๋ฉด ๋์ฒด๋์ด์ผ ํ๋ ํ์ ๋ฌธ์์ด์ด ์ผ๋ฐ ๋ฌธ์์ด์ ์์ต๋๋ค. ์ฒ์์๋ ๋ฌธ์์ด์ ๋ฐํํฉ๋๋ค. ๋ฐ๋ผ์ ์ด๋ฌํ ์ํฉ์์๋ ๋จ์ํ ์ผ๋ฐ ๋ฌธ์์ด์ ๋ฐํํฉ๋๋ค. ๋ค์์ผ๋ก ์์์ ์ค๋ช
ํ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ฌ ๋ฐ๊ฒฌ๋ ๋ฐ์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ฌ ๊ต์ฒดํ ํ์ ๋ฌธ์์ด์ ์ขํ๋ฅผ ๋ํ๋
๋๋ค. ์ด ๋ฃจํ๊ฐ ์คํ๋ฉ๋๋ค . ๊ต์ฒดํด์ผ ํ๋ ํ์ ๋ฌธ์์ด์ด ๋ฐ๊ฒฌ๋ ํ์๋งํผ ๋ฌธ์์ด์ด ๊ต์ฒดํด์ผ ํ๋ ๋ฌธ์๋ก๋ง ๊ตฌ์ฑ๋์ด ์๋ ๊ฒฝ์ฐ ์ด ๊ฒฝ์ฐ์๋ง ๋ฃจํ๊ฐ ์์ ํ ์คํ๋๊ณ ๊ฒฐ๊ณผ๊ฐ ๋ฌธ์์ด๋ก ๋ณํ๋ฉ๋๋ค. ์ด ๋ฐฉ๋ฒ์ด ๋ง๋์ง ํ์ธํด ๋ณด์์ผ๊ฒ ์ฃ ? ๋ค์ํ ์ํฉ์์ ๋ฉ์๋์ ์๋์ ํ์ธํ๋ ํ
์คํธ๋ฅผ ์์ฑํด ๋ณด๊ฒ ์ต๋๋ค. String
toString
-1
replace
StringBuilder
StringBuilder
@Test
public void customReplaceAllTest() {
String str = "qwertyuiop__qwertyuiop__";
String firstCase = Solution.customReplaceAll(str, "q", "a");
String firstResult = "awertyuiop__awertyuiop__";
assertEquals(firstCase, firstResult);
String secondCase = Solution.customReplaceAll(str, "q", "ab");
String secondResult = "abwertyuiop__abwertyuiop__";
assertEquals(secondCase, secondResult);
String thirdCase = Solution.customReplaceAll(str, "rtyu", "*");
String thirdResult = "qwe*iop__qwe*iop__";
assertEquals(thirdCase, thirdResult);
String fourthCase = Solution.customReplaceAll(str, "q", "");
String fourthResult = "wertyuiop__wertyuiop__";
assertEquals(fourthCase, fourthResult);
String fifthCase = Solution.customReplaceAll(str, "uio", "");
String fifthResult = "qwertyp__qwertyp__";
assertEquals(fifthCase, fifthResult);
String sixthCase = Solution.customReplaceAll(str, "", "***");
assertEquals(sixthCase, str);
String seventhCase = Solution.customReplaceAll("", "q", "***");
assertEquals(seventhCase, "");
}
7๊ฐ์ ๋ณ๋ ํ
์คํธ๋ก ๋๋ ์ ์์ผ๋ฉฐ, ๊ฐ ํ
์คํธ๋ ์์ฒด ํ
์คํธ ์ผ์ด์ค๋ฅผ ๋ด๋นํฉ๋๋ค. ์ถ์ํ๋ฉด ๋
น์, ์ฆ ์ฑ๊ณต์์ ์ ์ ์์ต๋๋ค. ๊ธ์, ๊ทธ๊ฒ ์ ๋ถ์ธ ๊ฒ ๊ฐ์ต๋๋ค. ์ ๊น๋ง์, ์์์ ์ด ๋ฐฉ๋ฒ replaceAll
์ด String
. ๊ธ์, ์ดํด ๋ณด์:
String str = "qwertyuiop__qwertyuiop__";
long firstStartTime = System.nanoTime();
for (long i = 0; i < 10000000L; i++) {
str.replaceAll("tyu", "#");
}
double firstPerformance = System.nanoTime() - firstStartTime;
long secondStartTime = System.nanoTime();
for (long i = 0; i < 10000000L; i++) {
customReplaceAll(str, "tyu", "#");
}
double secondPerformance = System.nanoTime() - secondStartTime;
System.out.println("Performance ratio - " + firstPerformance / secondPerformance);
๋ค์์ผ๋ก ์ด ์ฝ๋๋ฅผ ์ธ ๋ฒ ์คํํ์ฌ ๋ค์๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ป์์ต๋๋ค. ์ฝ์ ์ถ๋ ฅ:
Performance ratio - 5.012148941181627
Performance ratio - 5.320637176017641
Performance ratio - 4.719192686500394
๋ณด์๋ค์ํผ ํ๊ท ์ ์ผ๋ก ์ฐ๋ฆฌ์ ๋ฐฉ๋ฒ์ ํด๋์ replaceAll
์์
๋ณด๋ค String
5๋ฐฐ ๋ ์์ฐ์ ์
๋๋ค! ๊ธ์, ๋ง์ง๋ง์ผ๋ก ๋์ผํ ๊ฒ์ฌ๋ฅผ ์คํํด ๋ด
์๋ค. ๋งํ์๋ฉด ํ๋ ๊ฒ์
๋๋ค. ์ฆ, ์ผ์นํ๋ ํญ๋ชฉ์ด ์๋ ๊ฒฝ์ฐ์
๋๋ค. "tyu"
๊ฒ์ ๋ฌธ์์ด์ ์์ ๋ก ๋ฐ๊พธ๊ฒ ์ต๋๋ค "--"
. ์ธ ๋ฒ์ ์คํ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋์์ต๋๋ค. ์ฝ์ ์ถ๋ ฅ:
Performance ratio - 8.789647093542246
Performance ratio - 9.177105482660881
Performance ratio - 8.520964375227406
์ผ์นํ๋ ํญ๋ชฉ์ด ์๋ ๊ฒฝ์ฐ์ ์ฑ๋ฅ์ ํ๊ท 8.8๋ฐฐ ํฅ์๋์์ต๋๋ค!
GO TO FULL VERSION