
嘻道奇闻
- 文章199742
- 阅读14625734
Java字符串大扫除:正则表达式VS循环处理谁更强?7个实战场景告诉你答案
锛堢棝鐐瑰満鏅紩鍏ワ級
"鍏勫紵浠紝褰撲骇鍝佺粡鐞嗙敥缁欎綘杩欐牱鐨勯渶姹傦細'鎶婄敤鎴疯緭鍏ラ噷鐨?#@$%鍏ㄩ儴鎹㈡垚涓嬪垝绾匡紝浣嗕繚鐣欎腑鏂囩牬鎶樺彿鈥斺€?锛屼綘鏄€夋嫨鍐欎笁澶╀笁澶滅殑寰幆锛岃繕鏄敤姝e垯琛ㄨ揪寮忎竴閿悶瀹氾紵" 鍒€ワ紝鍜变滑鐢ㄧ湡瀹炰唬鐮佸甫浣犵牬灞€锛?/p>
鍦烘櫙1锛氱敤鎴锋敞鍐屼俊鎭竻娲?/h3>
鈥?strong>鈥嬮渶姹傗€?/strong>鈥嬶細鎶?寮犱笁*2024#鏂颁汉"涓殑鐗规畩绗﹀彿鏇挎崲涓轰笅鍒掔嚎
姝e垯娲捐В娉曪細
java澶嶅埗String username = "寮犱笁*2024#鏂颁汉".replaceAll("[*#]", "_"); // 杈撳嚭锛氬紶涓塤2024_鏂颁汉
鈥?strong>鈥嬩紭鐐光€?/strong>鈥嬶細1琛屼唬鐮佹悶瀹氾紝瑙勫垯鍙樻洿鍙渶鏀规鍒欒〃杈惧紡
鈥?strong>鈥嬬己鐐光€?/strong>鈥嬶細闇€瑕佺悊瑙 ]绗﹀彿闆嗚娉?/p>
寰幆娲捐В娉曪細
java澶嶅埗char[] chars = username.toCharArray(); for(int i=0; i
if("*#".indexOf(chars[i]) != -1){ chars[i] = '_'; } } // 杈撳嚭锛氬紶涓塤2024_鏂颁汉
鈥?strong>鈥嬩紭鍔库€?/strong>鈥嬶細閫傚悎绮剧‘鎺у埗鏇挎崲杩囩▼
鈥?strong>鈥嬪姡鍔库€?/strong>鈥嬶細鏂板绗﹀彿瑕佹敼浠g爜閫昏緫
鍦烘櫙2锛氭棩蹇楁晱鎰熶俊鎭劚鏁?/h3>
鈥?strong>鈥嬮渶姹傗€?/strong>鈥嬶細鎶?閾惰鍗″彿622588[123456]789"涓殑[]鍙婂唴瀹规浛鎹负[鈥?strong>鈥嬧€?/strong>鈥嬧€?*鈥媇
姝e垯闂數鎴橈細
java澶嶅埗String log = log.replaceAll("\$$\\d+\$$", "[******]"); // 杈撳嚭锛氶摱琛屽崱鍙?22588[******]789
鈥?strong>鈥嬫妧宸х偣鈥?/strong>鈥嬶細
- 鐢╘d+鍖归厤浠绘剰闀垮害鏁板瓧
- 淇濈暀鏂规嫭鍙风粨鏋?/li>
寰幆鏀诲潥鎴橈細
java澶嶅埗boolean inBracket = false; StringBuilder sb = new StringBuilder(); for(char c : log.toCharArray()){ if(c == '[') inBracket = true; if(c == ']') inBracket = false; sb.append(inBracket ? '*' : c); } // 杈撳嚭锛氶摱琛屽崱鍙?22588[******]789
鈥?strong>鈥嬮€傜敤鍦烘櫙鈥?/strong>鈥嬶細闇€瑕佺姸鎬佸垽鏂殑鏇挎崲閫昏緫
鎬ц兘鎿傚彴璧涳紙澶勭悊10涓囨锛?/h3>
鏂规硶 | 鎵ц鏃堕棿 | 鍐呭瓨娑堣€?/th> | 浠g爜澶嶆潅搴?/th> |
---|---|---|---|
姝e垯琛ㄨ揪寮?/td> | 210ms | 杈冮珮 | 鈽呪槄鈽嗏槅鈽?/td> |
寰幆澶勭悊 | 85ms | 杈冧綆 | 鈽呪槄鈽呪槄鈽?/td> |
鈥?strong>鈥嬭娉粡楠屸€?/strong>鈥嬶細
- 澶勭悊閲?lt;1000娆$敤姝e垯鏇村垝绠?/li>
- 瓒呴暱鏂囨湰(>1MB)浼樺厛閫夊惊鐜?/li>
- 姝e垯鐨勯缂栬瘧妯″紡鍙彁閫?鍊?/li>
鍦烘櫙3锛氬浗闄呭寲瀛楃鏇挎崲
鈥?strong>鈥嬪钁╅渶姹傗€?/strong>鈥嬶細鏇挎崲娉拌鏁板瓧"喙愢箲喙掄箵"涓洪樋鎷変集鏁板瓧
姝e垯榛戠鎶€锛?/h4>
java澶嶅埗String thaiNum = "喔`斧喔编釜:喙愢箲喙掄箵".replaceAll("[喙?喙橾", m -> String.valueOf("喙愢箲喙掄箵喙斷箷喙栢箺喙樴箼".indexOf(m.group())));
// 杈撳嚭锛氞福喔副喔?0123
String thaiNum = "喔`斧喔编釜:喙愢箲喙掄箵".replaceAll("[喙?喙橾", m -> String.valueOf("喙愢箲喙掄箵喙斷箷喙栢箺喙樴箼".indexOf(m.group())));
// 杈撳嚭锛氞福喔副喔?0123
鈥?strong>鈥嬩寒鐐光€?/strong>鈥嬶細Lambda琛ㄨ揪寮忓疄鐜版槧灏勬浛鎹?/p>
寰幆缈昏瘧瀹橈細
java澶嶅埗HashMap
thaiMap = new HashMap<>(); thaiMap.put('喙?,'0'); // 鍏朵粬鏄犲皠鐪佺暐... char[] arr = thaiNum.toCharArray(); for(int i=0; i
鈥?strong>鈥嬩紭鍔库€?/strong>鈥嬶細鏄犲皠鍏崇郴娓呮櫚鍙
鍦烘櫙4锛氬姩鎬佹浛鎹㈣鍒?/h3>
鈥?strong>鈥嬪彉鎬侀渶姹傗€?/strong>鈥嬶細姣忓ぉ浠庢暟鎹簱璇诲彇涓嶅悓鐨勬浛鎹㈣鍒?/p>
姝e垯鍙樺舰璁帮細
java澶嶅埗// 浠庢暟鎹簱璇诲彇rulesMap{"a":"X", "b":"Y"} String pattern = rulesMap.keySet().stream().map(k -> "("+k+")").collect(joining("|")); Pattern p = Pattern.compile(pattern); Matcher m = p.matcher(input); StringBuffer sb = new StringBuffer(); while(m.find()){ m.appendReplacement(sb, rulesMap.get(m.group(1))); } m.appendTail(sb);
鈥?strong>鈥嬫牳蹇冩妧宸р€?/strong>鈥嬶細鍔ㄦ€佺敓鎴愭鍒欏垎缁?/p>
寰幆鍔犲己鐗堬細
java澶嶅埗StringBuilder result = new StringBuilder(input); rulesMap.forEach((k,v) -> { int index; while((index = result.indexOf(k)) != -1){ result.replace(index, index+k.length(), v); } });
鈥?strong>鈥嬭嚧鍛界己闄封€?/strong>鈥嬶細澶氭閬嶅巻褰卞搷鎬ц兘
鍏勾鑰佸徃鏈虹殑蹇犲憡
"鐪嬭繃涓婄櫨涓浛鎹㈠紩鍙戠殑鐢熶骇浜嬫晠鍚庯紝鎬荤粨涓夋潯閾佸緥锛?/p>
- 鈥?strong>鈥嬭兘鐢⊿tringBuilder灏卞埆鐢⊿tring鈥?/strong>鈥嬶細寰幆澶勭悊鏃跺唴瀛樿妭鐪?0%浠ヤ笂
- 鈥?strong>鈥嬫鍒欒〃杈惧紡瑕佸啓娉ㄩ噴鈥?/strong>鈥嬶細涓変釜鏈堝悗浣犺嚜宸遍兘鐪嬩笉鎳傜殑[^\p{L}\p{N}\s]鏄粈涔堥
- 鈥?strong>鈥嬪厛娓呮礂鍚庡鐞嗏€?/strong>鈥嬶細閬囧埌娣峰悎缂栫爜鐨勬枃鏈紝鍏堢敤Normalizer瑙勮寖鍖?/li>
鏈€鍚庤涓湡浜嬶細鍘诲勾鐢ㄦ鍒欏鐞唀moji鏇挎崲锛屾病鑰冭檻缁勫悎瀛楃锛堟瘮濡傪焽焽虫槸涓ゅ瓧绗︼級锛岀粨鏋滄妸鍥芥棗閮芥浛鎹㈡垚闂彿锛屽樊鐐瑰紩鍙戝浗闄呯籂绾?..鎵€浠ュ晩锛屽鐞嗙壒娈婂瓧绗︽椂涓€瀹氳鎵撳紑Unicode寮€鍏筹紒"