JavaRush /Java Blog /Random-KO /Java์—์„œ ๋ฌธ์ž์—ด ๋ฐ”๊พธ๊ธฐ

Java์—์„œ ๋ฌธ์ž์—ด ๋ฐ”๊พธ๊ธฐ

Random-KO ๊ทธ๋ฃน์— ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค
ํ”„๋กœ๊ทธ๋ž˜๋จธ์˜ ์ž‘์—…์—์„œ๋Š” ์ผ๋ถ€ ์ž‘์—…์ด๋‚˜ ํ•ด๋‹น ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ๋ฐ˜๋ณต๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์˜ค๋Š˜ ์ €๋Š” Java ๊ฐœ๋ฐœ์ž์˜ ์ผ์ƒ ์—…๋ฌด์—์„œ ์ž์ฃผ ์ ‘ํ•˜๊ฒŒ ๋˜๋Š” ์ฃผ์ œ๋ฅผ ๋‹ค๋ฃจ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. Java์—์„œ ๋ฌธ์ž์—ด ๋ฐ”๊พธ๊ธฐ - 1ํŠน์ • ๋ฉ”์„œ๋“œ๋กœ๋ถ€ํ„ฐ ํŠน์ • ๋ฌธ์ž์—ด์„ ๋ฐ›์•˜๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์— ๊ด€ํ•œ ๋ชจ๋“  ๊ฒƒ์ด ์ข‹์€ ๊ฒƒ ๊ฐ™์ง€๋งŒ ๋‹น์‹ ์—๊ฒŒ ์–ด์šธ๋ฆฌ์ง€ ์•Š๋Š” ์ž‘์€ ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ตฌ๋ถ„ ๊ธฐํ˜ธ๊ฐ€ ์ ํ•ฉํ•˜์ง€ ์•Š๊ณ  ๋‹ค๋ฅธ ๊ฒƒ์ด ํ•„์š”ํ•˜๊ฑฐ๋‚˜ ์ „ํ˜€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌํ•œ ์ƒํ™ฉ์—์„œ ๋ฌด์—‡์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? replace๋‹น์—ฐํžˆ ํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค String.

์ž๋ฐ” ๋ฌธ์ž์—ด ๋ฐ”๊พธ๊ธฐ

์œ ํ˜• ๊ฐ์ฒด์—๋Š” String๊ต์ฒด ๋ฐฉ๋ฒ•์˜ ๋„ค ๊ฐ€์ง€ ๋ณ€ํ˜•์ด ์žˆ์Šต๋‹ˆ๋‹ค replace.
  • replace(char, char);
  • replace(CharSequence, CharSequence);
  • replaceFirst(String, String);
  • replaceAll(String, String).
์ด ๋ชจ๋“  ๋ฉ”์„œ๋“œ์˜ ๋ชฉ์ ์€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๋ฌธ์ž์—ด์˜ ์ผ๋ถ€๋ฅผ ๋‹ค๋ฅธ ๋ฌธ์ž์—ด๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ข€ ๋” ์ž์„ธํžˆ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. 1.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)์˜ ๋ชจ๋“  ํ•˜์œ„ ๋ฌธ์ž์—ด์„ . ์ •๊ทœ์‹์„ ์ฒซ ๋ฒˆ์งธ ์ธ์ˆ˜๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค . ์˜ˆ๋ฅผ ๋“ค์–ด, ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด์ „ ๊ต์ฒด๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ์ƒˆ๋กœ์šด ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. regexreplacementregex
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. ์ฃผ์š” ํด๋ž˜์Šค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:
  1. Pattern- ์ •๊ทœ์‹์˜ ์ปดํŒŒ์ผ๋œ ๋ฒ„์ „์„ ์ œ๊ณตํ•˜๋Š” ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค.
  2. 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 ๋Š” ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค . ์šฐ๋ฆฌ๊ฐ€ ๊ธฐ์–ตํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์ด๋Ÿฌํ•œ ํด๋ž˜์Šค๋Š” ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉํ•˜๋„๋ก ์ตœ์ ํ™”๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ๋‹จ์ผ ์Šค๋ ˆ๋“œ ์‚ฌ์šฉ์—์„œ ๋‹ค์†Œ ๋น ๋ฅด๊ฒŒ ์ž‘๋™ํ•œ๋‹ค๋Š” ์ ์„ ์ œ์™ธํ•˜๋ฉด ์‹ค์ œ๋กœ ๋‹ค๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค . ์ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์˜ค๋Š˜ ์šฐ๋ฆฌ๋Š” ์ด ํด๋ž˜์Šค์—๋Š” ๋งŽ์€ ํฅ๋ฏธ๋กœ์šด ๋ฉ”์†Œ๋“œ๊ฐ€ ์žˆ์ง€๋งŒ ํŠนํžˆ ์ง€๊ธˆ ์šฐ๋ฆฌ๋Š” ์— ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค . โ€” ์ด ๋ฉ”์„œ๋“œ๋Š” ์ด ์‹œํ€€์Šค์˜ ํ•˜์œ„ ๋ฌธ์ž์—ด์— ์žˆ๋Š” ๋ฌธ์ž๋ฅผ ์ง€์ •๋œ ๋ฌธ์ž์—ด์— ์žˆ๋Š” ๋ฌธ์ž๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. ํ•˜์œ„ ๋ฌธ์ž์—ด์€ ์ง€์ •๋œ ์‹œ์ž‘ ๋ถ€๋ถ„์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ์ธ๋ฑ์Šค ๋์— ์žˆ๋Š” ๋ฌธ์ž๊นŒ์ง€ ๋˜๋Š” ํ•ด๋‹น ๋ฌธ์ž๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ์‹œํ€€์Šค ๋๊นŒ์ง€ ๊ณ„์†๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค: StringimmutablereplaceStringJava์—์„œ ๋ฌธ์ž์—ด ๋ฐ”๊พธ๊ธฐ - 2StringimmutableimmutableStringBufferStringBuilderStringBuilder.replaceStringBuilder 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๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค . ๋ฃจํ”„์˜ ์ฒซ ๋ฒˆ์งธ ๋ฐ˜๋ณต์—์„œ ์ธ๋ฑ์Šค๊ฐ€ ๋™์ผํ•˜๋ฉด ๋Œ€์ฒด๋˜์–ด์•ผ ํ•˜๋Š” ํ•˜์œ„ ๋ฌธ์ž์—ด์ด ์ผ๋ฐ˜ ๋ฌธ์ž์—ด์— ์—†์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๋Ÿฌํ•œ ์ƒํ™ฉ์—์„œ๋Š” ๋‹จ์ˆœํžˆ ์ผ๋ฐ˜ ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์œผ๋กœ ์œ„์—์„œ ์„ค๋ช…ํ•œ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐœ๊ฒฌ๋œ ๋ฐœ์ƒ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ต์ฒดํ•  ํ•˜์œ„ ๋ฌธ์ž์—ด์˜ ์ขŒํ‘œ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ด ๋ฃจํ”„๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค . ๊ต์ฒดํ•ด์•ผ ํ•˜๋Š” ํ•˜์œ„ ๋ฌธ์ž์—ด์ด ๋ฐœ๊ฒฌ๋œ ํšŸ์ˆ˜๋งŒํผ ๋ฌธ์ž์—ด์ด ๊ต์ฒดํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ž๋กœ๋งŒ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ ์ด ๊ฒฝ์šฐ์—๋งŒ ๋ฃจํ”„๊ฐ€ ์™„์ „ํžˆ ์‹คํ–‰๋˜๊ณ  ๊ฒฐ๊ณผ๊ฐ€ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์ด ๋งž๋Š”์ง€ ํ™•์ธํ•ด ๋ณด์•„์•ผ๊ฒ ์ฃ ? ๋‹ค์–‘ํ•œ ์ƒํ™ฉ์—์„œ ๋ฉ”์„œ๋“œ์˜ ์ž‘๋™์„ ํ™•์ธํ•˜๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. StringtoString-1replaceStringBuilderStringBuilder
@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์ˆ˜์—… ๋ณด๋‹ค String5๋ฐฐ ๋” ์ƒ์‚ฐ์ ์ž…๋‹ˆ๋‹ค! ๊ธ€์Ž„, ๋งˆ์ง€๋ง‰์œผ๋กœ ๋™์ผํ•œ ๊ฒ€์‚ฌ๋ฅผ ์‹คํ–‰ํ•ด ๋ด…์‹œ๋‹ค. ๋งํ•˜์ž๋ฉด ํ—›๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฆ‰, ์ผ์น˜ํ•˜๋Š” ํ•ญ๋ชฉ์ด ์—†๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. "tyu"๊ฒ€์ƒ‰ ๋ฌธ์ž์—ด์„ ์—์„œ ๋กœ ๋ฐ”๊พธ๊ฒ ์Šต๋‹ˆ๋‹ค "--". ์„ธ ๋ฒˆ์˜ ์‹คํ–‰์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์™”์Šต๋‹ˆ๋‹ค. ์ฝ˜์†” ์ถœ๋ ฅ:
Performance ratio  - 8.789647093542246
 
Performance ratio  - 9.177105482660881
 
Performance ratio  - 8.520964375227406
์ผ์น˜ํ•˜๋Š” ํ•ญ๋ชฉ์ด ์—†๋Š” ๊ฒฝ์šฐ์˜ ์„ฑ๋Šฅ์€ ํ‰๊ท  8.8๋ฐฐ ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค! Java์—์„œ ๋ฌธ์ž์—ด ๋ฐ”๊พธ๊ธฐ - 4
์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION