请有人告诉我如何匹配“_”和句号“。”使用正则表达式在字符串中激动一次,使用indexOf()而不是正则表达式也更有效。
String s= "Hello_Wor.ld" or
s="12323_!£££$.asdfasd"
基本上,在_
和.
之前和之后,任何字符都不能出现,唯一的要求是整个字符串只应包含一个_
和.
<的出现/ p>
答案 0 :(得分:7)
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;
}
答案 1 :(得分:2)
将字符串与单个.
匹配:
/^[^.]*\.[^.]*$/
_
相同:
/^[^_]*_[^_]*/
合并的正则表达式应该是这样的:
/^([^._]*\.[^._]*_[^._]*)|([^._]*_[^._]*\.[^._]*)$/
现在显而易见的是indexOf
是更好的解决方案,更简单(性能无关紧要,直到它被证明是瓶颈)。
如果有兴趣,请注意合并的正则表达式有两个术语,“单个.
之前的单个_
”,反之亦然。这将有六个三个字符,和n!为了运行正则表达式和AND结果比使用组合正则表达式更简单。
在使用正则表达式时,必须始终寻找更简单的解决方案。