請有人能告訴我如何匹配「_」和句點「。」在使用正則表達式的字符串中一次感到興奮,使用indexOf()而不是正則表達式更高效。正則表達式在java和它的性能比較index.0f
String s= "Hello_Wor.ld" or
s="12323_!£££$.asdfasd"
bascially任何字符數可以來之前和_
和.
後,唯一的要求是,整個字符串應該只包含_
一個次數和.
請有人能告訴我如何匹配「_」和句點「。」在使用正則表達式的字符串中一次感到興奮,使用indexOf()而不是正則表達式更高效。正則表達式在java和它的性能比較index.0f
String s= "Hello_Wor.ld" or
s="12323_!£££$.asdfasd"
bascially任何字符數可以來之前和_
和.
後,唯一的要求是,整個字符串應該只包含_
一個次數和.
indexOf
會比一個正則表達式快得多,並可能會更容易理解。
只是測試是否indexOf('_') >= 0
,然後如果indexOf('_', indexOfFirstUnderScore) < 0
。在這段時間做同樣的事情。
private boolean containsOneAndOnlyOne(String s, char c) {
int firstIndex = s.indexOf(c);
if (firstIndex < 0) {
return false;
}
int secondIndex = s.indexOf(c, firstIndex + 1);
return secondIndex < 0;
}
當然可以。感謝您的更正。 –
我現在可以安全地刪除我的答案! :) –
匹配具有單一.
的字符串:
/^[^.]*\.[^.]*$/
同爲_
:
/^[^_]*_[^_]*/
合併正則表達式應該是這樣的:
/^([^._]*\.[^._]*_[^._]*)|([^._]*_[^._]*\.[^._]*)$/
現在應該很明顯indexOf
是更好的解決方案,更簡單(性能無關緊要,直到它被證明是瓶頸)。
如果感興趣,請注意組合正則表達式如何具有兩個詞,「單個.
之前的單個字符串_
」,反之亦然。它將有六個三個字符,並且n!爲n。運行這兩個正則表達式並將AND結果比使用組合正則表達式更簡單。
在使用正則表達式時,必須總是尋找更簡單的解決方案。
你應該更關心哪一個更容易閱讀和理解的意圖,因此更容易維護,在大多數邏輯情況下'regex'將失去這種考慮,直接匹配的情況下,'regex'可能會贏。 –