1

我需要检查一个字符串是否包含在另一个字符串中。

例如,“abc”包含在“abc/def/gh”、“def/abc/gh”中,但不包含在 “abcd/xyz/gh”、“def/abcd/gh”中。

所以,我input用“/”分割了字符串。然后迭代生成的 String 数组以检查input.

是否可以使用类似的方法来避免创建数组Regex

另外,有人可以确认使用 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;
     }
 }

控制台输出为: true true false false

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

使用正则表达式更方便(?),但请自己计时是否更快:

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

在将其作为文字插入之前,我确保searchString不包含. 正则表达式将确保输入中的搜索字符串前后有一个,或者搜索字符串是输入中的第一个或最后一个标记。/Pattern.quote/

于 2013-01-21T07:17:22.340 回答
0

试试这个正则表达式

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

或者

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