所以,我正在研究一个程序,我需要检查一个字符串是否有多个点.我去看了一下文档regex
,发现了这个:
X{n,m}? X, at least n but not more than m times
Run Code Online (Sandbox Code Playgroud)
按照这个逻辑,我尝试了这个:
mString = "He9.lo,"
if (myString.matches(".{1,2}?")){
System.out.print("it works");
}
Run Code Online (Sandbox Code Playgroud)
但这不起作用(它没有给出任何错误,它只是不会做内部的事情if
).我认为问题是认为点意味着别的东西.我也看了这个问题:正则表达式,但是对于PHP,我不知道如何将其应用于java.
编辑:基本上我想知道一个字符串是否包含多个点,例如:
他...... lo(True,包含多个),hel.llo(False,包含一个),.. shell.o(True包含多个).
任何帮助,将不胜感激.
正则表达式中的点表示"任何字符".因此,如果你想要实际的点,你需要用反斜杠来逃避它 - 然后你需要在Java本身内逃避反斜杠......
if (myString.matches("\\.{1,2}?")){
Run Code Online (Sandbox Code Playgroud)
接下来你需要了解matches
尝试匹配整个文本 - 它不只是试图在字符串中找到模式.
目前还不完全清楚你的要求是什么 - 它只是"不止一个点在一起"或"在文本中的任何地方不止一个点"?如果是后者,应该这样做:
if (myString.matches(".*\\..*\\..*")) {
Run Code Online (Sandbox Code Playgroud)
......换句话说,任何东西,然后是一个点,然后是任何东西,然后是一个点,然后是任何东西 - "任何东西"都可以是"没有".所以这将匹配"He..llo"和"Hello",但不匹配"He.llo".
希望这就是你想要的.如果你真的只想要"它必须在某个地方......"那么它就更容易了:
if (myString.contains(".."))
Run Code Online (Sandbox Code Playgroud)
StringUtils.countMatches使正在发生的事情更加明显。
boolean multipleDots = StringUtils.countMatches( myString, "." ) > 1;
Run Code Online (Sandbox Code Playgroud)
正如其他答案中所提到的,你的正则表达式包含一个bug.你可以修复它(逃避点),或者使用String.contains
:
if (myString.contains("..")){
System.out.print("it works");
}
Run Code Online (Sandbox Code Playgroud)
这将匹配两个连续的点.如果你也在字符串中的任何地方寻找两个点(比如字符串"He.llo."),你可以这样做
if(myString.indexOf('.', myString.indexOf('.') + 1) != -1) {
System.out.print("it works"); //there are two or more dots in this string
}
Run Code Online (Sandbox Code Playgroud)
我认为其他答案更好,但是只是为了不同的角度
if (myString.indexOf(".") != myString.lastIndexOf(".")) {
// More then one dot...
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
11246 次 |
最近记录: |