4

所以,我正在开发一个程序,我需要检查一个字符串是否有多个点。我去看了文档regex,发现了这个:

X{n,m}?  X, at least n but not more than m times

按照这个逻辑,我尝试了这个:

mString = "He9.lo,"

if (myString.matches(".{1,2}?")){

    System.out.print("it works");
}

但这不起作用(它没有给出任何错误,它只是不会做里面的事情if)。我认为问题在于认为点意味着其他东西。我也看了这个问题:regex but is for php,我不知道如何将它应用于java。

编辑:基本上我想知道一个字符串是否包含多个点,例如:

He......lo(真,包含多个),hel.llo(假,包含一个),..hell.o(真包含多个)。

任何帮助,将不胜感激。

4

7 回答 7

8

正则表达式中的点表示“任何字符”。因此,如果您想要实际的点,则需要使用反斜杠对其进行转义 - 然后您需要在 Java 本身中转义反斜杠...

if (myString.matches("\\.{1,2}?")){

接下来,您需要了解matches尝试匹配整个文本 - 这不仅仅是尝试字符串中查找模式。

尚不完全清楚您的要求是什么 - 只是“多个点在一起”还是“文本中的任何位置多个点”?如果是后者,应该这样做:

if (myString.matches(".*\\..*\\..*")) {

...换句话说,任何东西,然后是一个点,然后是任何东西,然后是一个点,然后是任何东西——“任何东西”可以是“无”。所以这将匹配“He..llo”和“Hello”,但不匹配“He.llo”。

希望这就是你想要的。如果你真的只是想要“它必须有..在它的某个地方”,那么它更容易:

if (myString.contains(".."))
于 2012-08-22T22:37:25.860 回答
6

正如其他答案中提到的,您的正则表达式包含一个错误。您可以修复它(转义点),或者String.contains改用:

if (myString.contains("..")){
    System.out.print("it works");
}

这将匹配两个连续的点。如果您还在字符串中的任意位置寻找两个点(例如在字符串“He.llo.”中),您可以这样做

if(myString.indexOf('.', myString.indexOf('.') + 1) != -1) {
    System.out.print("it works"); //there are two or more dots in this string
}
于 2012-08-22T22:44:42.130 回答
4

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

if (myString.indexOf(".") != myString.lastIndexOf(".")) {
    // More then one dot...
}
于 2012-08-22T22:58:44.863 回答
3

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

boolean multipleDots = StringUtils.countMatches( myString, "." ) > 1;
于 2012-08-23T01:14:50.057 回答
1

您需要对已经属于正则表达式元字符集的那些字符使用转义序列字符

\ | ( ) [ { ^ $ * + ? . < >

自从“。” 字符也是元字符集的一部分,您需要使用“\”。用多个“.”匹配字符串模式 人物。

在这种情况下myString.matches("\\.{1,2}?")

于 2012-08-23T00:00:38.367 回答
1

您可以使用[]\转义特殊字符,即点字符.,表示任何字符。

例如使用括号来转义它: myString.matches("[.]{1,2}?")

于 2012-08-22T22:39:38.427 回答
1

如果我想检查字符串是否有 2 个点,这个解决方案非常适合我。换句话说,它是对 URL 的验证

private boolean isValid(String urlString) {
        try {
            String extensionValidator;
            extensionValidator = urlString.substring(urlString.lastIndexOf('.') + 1);
            URL url = new URL(urlString);

            if (urlString.indexOf('.', urlString.indexOf('.') + 1) != -1) {
                if (extensionValidator.length() >= 2 && urlString.contains(".")) {
                    return URLUtil.isValidUrl(urlString) && Patterns.WEB_URL.matcher(urlString).matches();
                }
            }

        } catch (MalformedURLException e) {

        }

        return false;
    }
于 2017-06-27T10:03:54.453 回答