1

文字列が別の文字列に含まれているかどうかを確認する必要があります。

たとえば、「abc」は「abc / def / gh」、「def / abc / gh」に含まれますが、 「abcd / xyz / gh」、「def / abcd/gh」には含まれません。

inputそこで、文字列を「/」で分割しました。次に、生成された文字列配列を繰り返して、をチェックしましたinput

次のようなものを使用して配列の作成を回避することは可能Regexですか?

また、正規表現を使用すると、私が使用した配列の作成と反復よりも高速になるかどうかを誰かが確認できますか?

前もって感謝します

public class RegexTest {

     public static void main(String[] args) {
          System.out.println(contains("abc/def/gh", "abc"));
          System.out.println(contains("def/abc/gh", "abc"));
          System.out.println(contains("def/abcd/gh", "abc"));
          System.out.println(contains("abcd/xyz/gh", "abc"));

     }

     private static boolean contains(String input, String searchString) {
        String[] strings = input.split("/");
        for (String string : strings) {
            if (string.equals(searchString))
                return true;
        }
        return false;
     }
 }

コンソール出力は次のとおりです。truetruefalsefalse

4

3 に答える 3

0

このようなもの:

String pattern = "(.*/)?abc(/.*)?";
System.out.println("abc/def/gh".matches(pattern));
System.out.println("def/abc/gh".matches(pattern));
System.out.println("def/abcd/gh".matches(pattern));
System.out.println("abcd/xyz/gh".matches(pattern));

版画

true
true
false
false
于 2013-01-21T07:15:43.377 に答える
0

この正規表現を試してください

s.matches("^abc/.+|.+/abc/.+|.+/abc$")

また

   s.startsWith("abc/") || s.contains("/abc/") || s.endsWith("/abc")
于 2013-01-21T07:12:56.703 に答える
0

正規表現を使用する方が便利です (?) が、それがより速いかどうか時間を計ってください:

if (!searchString.contains("/")) {
    return input.matches("(.*/)?" + Pattern.quote(searchString) + "(/.*)?");
} else {
    return false;
}

でリテラルとして挿入する前に、 にsearchStringが含まれていないことを確認しました。正規表現は、入力に検索文字列の前後にあることを確認します。それまたは検索文字列が入力の最初または最後のトークンです。/Pattern.quote/

于 2013-01-21T07:17:22.340 に答える