簡體   English   中英

字符串中有多少個點。 (JAVA)

[英]How many dots are in a string. (Java)

所以,我正在研究一個程序,我需要檢查一個字符串是否有多個點。 我去查看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里面的內容)。 我認為問題是認為點意味着別的東西。 我也看了這個問題: 正則表達式,但是對於PHP,我不知道如何將其應用於java。

編輯 :基本上我想知道一個字符串是否包含多個點,例如:

他...... lo(True,包含多個),hel.llo(False,包含一個),.. shell.o(True包含多個)。

任何幫助,將不勝感激。

正則表達式中的點表示“任何字符”。 因此,如果你想要實際的點,你需要用反斜杠來逃避它 - 然后你需要在Java本身內逃避反斜杠......

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

接下來,您需要了解matches嘗試匹配整個文本 - 它不僅僅是嘗試字符串中找到模式。

目前還不完全清楚你的要求是什么 - 它只是“不止一個點在一起”或“在文本中的任何地方不止一個點”? 如果是后者,應該這樣做:

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

......換句話說,任何東西,然后是一個點,然后是任何東西,然后是一個點,然后是任何東西 - “任何東西”都可以是“沒有”。 所以這將匹配“He..llo”和“Hello”,但不匹配“He.llo”。

希望這就是你想要的。 如果你真的只想要“它必須在某個地方......”那么它就更容易了:

if (myString.contains(".."))

正如其他答案中所提到的,你的正則表達式包含一個bug。 您可以修復它(轉義點),或使用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
}

我認為其他答案更好,只是為了不同的觀點

if (myString.indexOf(".") != myString.lastIndexOf(".")) {
    // More then one dot...
}

StringUtils.countMatches使得它更加明顯地發生了什么。

boolean multipleDots = StringUtils.countMatches( myString, "." ) > 1;

您可以使用[]\\來轉義特殊字符,即點字符. 是的,意思是任何角色。

例如使用括號來轉義它: myString.matches("[.]{1,2}?")

您需要為那些已經是正則表達式元字符集的一部分的字符使用轉義序列字符

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

自“。” 字符也是元字符集的一部分,你需要使用“\\”。 將字符串模式與多個“。”匹配。 字符。

在這種情況下myString.matches("\\\\.{1,2}?")

如果我想檢查字符串是否有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;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM