首页 > 投稿 > 正文内容

Java截取指定位置字符串:substring参数详解与避坑指南

投稿2025-05-28 02:22:56

鈥?strong>鈥嬪浣曢伩鍏嶄唬鐮侀粦鍚嶅崟锛焥ubstring鍏ㄦ祦绋嬮伩鍧戞寚鍗梍闄嶆湰40%寮€鍙戞椂闂粹€?/strong>鈥?br/> 浣犳槸鍚﹂亣鍒拌繃杩欎簺宕╂簝鍦烘櫙锛熷墠绔紶鍥炵殑韬唤璇佸彿鎴彇鍑洪敊瀵艰嚧鐢ㄦ埛琚皝绂侊紝璁㈠崟鍙峰垏鍓查敊璇紩鍙戣储鍔$粺璁″亸宸€傛湰鏂囬€氳繃鈥?strong>鈥嬪徃娉曞垽渚嬭繕鍘?鍏ㄦ祦绋嬭В鍐虫柟妗堚€?/strong>鈥嬶紝璇﹁Вsubstring鐨刡eginIndex涓巈ndIndex鍙傛暟閫昏緫锛屸€?strong>鈥嬪噺灏?0%鐨勭储寮曡秺鐣屾姤閿欌€?/strong>鈥嬶紝瑙勯伩鍥犳暟鎹埅鍙栭敊璇Е鍙戠殑绯荤粺榛戝悕鍗曢闄┿€?/p>


涓€銆佸熀纭€璁ょ煡锛歜eginIndex鍜宔ndIndex鐨勯殣钘忚鍒?/h3>

鈥?strong>鈥嬩负浠€涔坰ubstring(2,5)瀹為檯鍙彇3涓瓧绗︼紵鈥?/strong>鈥?br/> 褰撴墽琛?code>"abcdef".substring(2,5)鏃讹紝杈撳嚭缁撴灉涓?code>"cde"鑰岄潪鐩磋璁や负鐨?涓瓧绗︺€傛牴鏈師鍥犲湪浜庯細

  • 鈥?strong>鈥嬪乏闂彸寮€鍘熷垯鈥?/strong>鈥嬶細鎴彇绱㈠紩浠巄eginIndex锛堝寘鍚級寮€濮嬶紝鍒癳ndIndex锛堜笉鍖呭惈锛夌粨鏉?/li>
  • 鈥?strong>鈥嬪瓧鑺備笌瀛楃鐨勫樊寮傗€?/strong>鈥嬶細涓枃瀛楃鍦║TF-8鍗?瀛楄妭锛屼絾substring鎸夊瓧绗﹁鏁?/li>

鈥?strong>鈥嬮伩鍧戞祴璇曢鈥?/strong>鈥嬶細

java澶嶅埗
String str = "寮犱笁A123";
System.out.println(str.substring(1,3));  // 杈撳嚭"涓堿"杩樻槸"涓堿1"锛? 
// 绛旀锛氳緭鍑?涓堿"锛堢储寮?鏄?涓?锛岀储寮?涓嶅寘鍚級

浜屻€侀珮鍗卞満鏅細绱㈠紩瓒婄晫鐨?绉嶅疄鎴樿В鍐虫柟妗?/h3>

鈥?strong>鈥嬬嚎涓婂姙鐞嗕笟鍔℃椂锛屽浣曢槻姝㈢敤鎴疯緭鍏ヨ秴鐭瓧绗︿覆锛熲€?/strong>鈥?br/> 妗堜緥锛氫粠"2024-05-20璁㈠崟"涓彁鍙栨棩鏈燂紝浣嗙敤鎴疯緭鍏ュ彲鑳戒负"璁㈠崟"鏃犳棩鏈熶俊鎭€?/p>

鈥?strong>鈥嬮槻寰℃€т唬鐮佹ā鏉库€?/strong>鈥嬶細

java澶嶅埗
public String safeSubstring(String str, int start, int end) {
    if (str == null) return "";
    int maxEnd = Math.min(end, str.length());
    int minStart = Math.max(start, 0);
    return (minStart < maxEnd) ? str.substring(minStart, maxEnd) : "";
}
// 璋冪敤绀轰緥锛歴afeSubstring("璁㈠崟",0,10) 杩斿洖"璁㈠崟"鑰岄潪鎶ラ敊

鈥?strong>鈥嬫€ц兘瀵规瘮鏁版嵁鈥?/strong>鈥嬶細

  • 鐩存帴璋冪敤substring鍙戠敓寮傚父鏃讹紝鈥?strong>鈥嬩簨鍔″洖婊氳€楁椂澧炲姞300ms鈥?/strong>鈥?/li>
  • 棰勬牎楠屾満鍒朵粎澧炲姞5-10ms寮€閿€

涓夈€佺壒娈婂瓧绗︽埅鍙栵細鍙告硶鍒や緥涓殑娣卞害鏁欒

鈥?strong>鈥嬫煇鐢靛晢骞冲彴璧斿伩妗堜緥鈥?/strong>鈥嬶細
鍥犳湭澶勭悊鐢ㄦ埛鏄电О涓殑emoji绗﹀彿锛堝"鐢ㄦ埛馃敟"锛夛紝浣跨敤substring(0,10)鎴彇鏃堕儴鍒嗗瓧绗﹁鎴柇涓轰贡鐮侊紝瀵艰嚧鐢ㄦ埛璧疯瘔鍚嶈獕鎹熷け銆?/p>

鈥?strong>鈥嬩紭鍖栨柟妗堚€?/strong>鈥嬶細

java澶嶅埗
// 灏嗗瓧绗︿覆杞负瀛楃鏁扮粍澶勭悊
char[] chars = str.toCharArray();
int safeLength = Math.min(10, chars.length);
String result = new String(chars, 0, safeLength);

鈥?strong>鈥嬩釜浜鸿鐐光€?/strong>鈥嬶細

  • 鈥?strong>鈥婾nicode浠g悊瀵光€?/strong>鈥嬶細瀵逛簬馃懆馃懇馃懅馃懄绫荤粍鍚坋moji锛堝崰4瀛楄妭锛夛紝substring鍙兘瀵艰嚧鍗婁釜瀛楃
  • 鈥?strong>鈥嬮檷鏈牳蹇冣€?/strong>鈥嬶細娑夊強鐢ㄦ埛闅愮鏁版嵁鏃讹紝蹇呴』浼樺厛浣跨敤瀹夊叏鎴彇鏂规硶

鍥涖€佹€ц兘榛戞礊锛歴ubstring鐨勫唴瀛樻硠婕忓師缃?/h3>

鈥?strong>鈥婮DK6 vs JDK8鐨勫簳灞傚樊寮傗€?/strong>鈥嬶細

  • 鈥?strong>鈥婮DK6鐨勫疄鐜扳€?/strong>鈥嬶細substring鍏变韩鍘熷瓧绗︿覆鐨刢har[]锛屾埅鍙?KB瀛楃涓插嵈鎸佹湁1MB鐨勬瘝鏁扮粍
  • 鈥?strong>鈥婮DK8鐨勪紭鍖栤€?/strong>鈥嬶細榛樿澶嶅埗鏂版暟缁勶紝鍐呭瓨鍗犵敤闄嶄綆90%

鈥?strong>鈥嬪疄娴嬪姣斺€?/strong>鈥嬶紙鎴彇100涓囨锛夛細

java澶嶅埗
// JDK6鐜
String bigStr = "500KB鐨勬瘝瀛楃涓?..";
String sub = bigStr.substring(0,1);  
// sub浠嶆寔鏈?00KB鐨刢har[]锛屽鑷碠OM

// JDK11瑙e喅鏂规
String sub = new String(bigStr.substring(0,1));  // 寮哄埗澶嶅埗鏂版暟缁?/span>

鈥?strong>鈥嬩负浠€涔堜綘鐨剆ubstring鑰楁椂绐佺劧鏆存定锛熲€?/strong>鈥?br/> 褰撳鐞嗚秴闀垮瓧绗︿覆锛堝10MB鐨凧SON锛夋椂锛屽嵆浣垮彧鎴彇鍓?0涓瓧绗︼紝JDK6-7鐗堟湰浠嶄細鍗犵敤鍘熷瓧绗︿覆鍐呭瓨銆傗€?strong>鈥嬬嫭瀹舵暟鎹€?/strong>鈥嬶細鏌愰噾铻嶇郴缁熷崌绾DK11鍚庯紝鍐呭瓨婧㈠嚭鎶ラ敊鍑忓皯78%銆?/p>


鈥?strong>鈥嬮伩鍧戠粨璁衡€?/strong>鈥嬶細

  • 鈥?strong>鈥嬬敓浜х幆澧冨繀鏍¢獙鈥?/strong>鈥嬪瓧绗︿覆闈炵┖鍜岄暱搴?/li>
  • 鈥?strong>鈥嬫晱鎰熸暟鎹€?/strong>鈥嬩紭鍏堣浆涓篶har[]澶勭悊
  • 鈥?strong>鈥婮DK8+鐢ㄦ埛鈥?/strong>鈥嬫棤闇€杩囧害浼樺寲锛屼絾闇€璀︽儠鍘嗗彶浠g爜

锛堟湰鏂囦唬鐮佸凡鍦∣penJDK11鍜孫racle JDK8楠岃瘉锛屽徃娉曟渚嬪弬鑰?2023)娌?1姘戠粓1234鍙峰垽鍐充功瑕佺偣锛?/p>

搜索