使用Regex搜索字符串与另一个字符串

时间:2013-01-21 07:02:56

标签: java regex

我需要检查String是否包含在另一个String中。

例如,“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;
     }
 }

控制台输出是: 真正 真正 假 假

3 个答案:

答案 0 :(得分:0)

试试这个正则表达式

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

   s.startsWith("abc/") || s.contains("/abc/") || s.endsWith("/abc")

答案 1 :(得分: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

答案 2 :(得分:0)

使用正则表达式更方便(?),但请自行决定它是否更快:

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

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