字符串中有多少个点.(JAVA)

0gr*_*ity 4 java regex

所以,我正在研究一个程序,我需要检查一个字符串是否有多个点.我去看了一下文档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包含多个).

任何帮助,将不胜感激.

Jon*_*eet 8

正则表达式中的点表示"任何字符".因此,如果你想要实际的点,你需要用反斜杠来逃避它 - 然后你需要在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)


Nat*_*sch 6

StringUtils.countMatches使正在发生的事情更加明显。

boolean multipleDots = StringUtils.countMatches( myString, "." ) > 1;
Run Code Online (Sandbox Code Playgroud)


Ale*_*øld 5

正如其他答案中所提到的,你的正则表达式包含一个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)


Mad*_*mer 5

我认为其他答案更好,但是只是为了不同的角度

if (myString.indexOf(".") != myString.lastIndexOf(".")) {
    // More then one dot...
}
Run Code Online (Sandbox Code Playgroud)