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)。問題は、ドットが何か他のものを意味していると考えていることだと思います。私もこの質問を見ました:正規表現ですが、php用であり、それをjavaに適用する方法がわかりません。

編集:基本的に、文字列に複数のドットが含まれているかどうかを知りたいです。例:

He ...... lo(True、複数含まれています)、hel.llo(False、1つ含まれています)、.. hell.o(True、複数含まれています)。

どんな助けでもいただければ幸いです。

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");
}

これは、2つの連続するドットに一致します。文字列のどこかに2つのドットも探している場合(文字列「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-22T22:39:38.427 に答える
1

すでに正規表現メタ文字セットの一部である文字には、エスケープシーケンス文字を使用する必要があります

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

「。」以来 文字もメタ文字セットの一部です。「\」を使用する必要があります。文字列パターンを複数の「。」と一致させます。文字。

この場合myString.matches("\\.{1,2}?")

于 2012-08-23T00:00:38.367 に答える
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 に答える