Java 使用正则表达式搜索另一个字符串
我需要检查一个字符串是否包含在另一个字符串中 例如,“abc”包含在“abc/def/gh”、“def/abc/gh”中,但不包含在“abcd/xyz/gh”、“def/abcd/gh”中 因此,我将Java 使用正则表达式搜索另一个字符串,java,regex,Java,Regex,我需要检查一个字符串是否包含在另一个字符串中 例如,“abc”包含在“abc/def/gh”、“def/abc/gh”中,但不包含在“abcd/xyz/gh”、“def/abcd/gh”中 因此,我将输入字符串拆分为“/”。然后迭代生成的字符串数组以对照输入进行检查 是否可以避免使用类似于Regex的方法创建数组 另外,有人能确认使用正则表达式是否会比我使用的数组的创建和迭代更快吗 提前谢谢 public class RegexTest { public static void ma
输入
字符串拆分为“/”。然后迭代生成的字符串数组以对照输入进行检查
是否可以避免使用类似于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;
}
}
控制台输出为:
真的
真的
假的
false尝试此正则表达式
s.matches("^abc/.+|.+/abc/.+|.+/abc$")
或
大概是这样的:
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
使用正则表达式更方便(?),但请自己计时是否更快:
if (!searchString.contains("/")) {
return input.matches("(.*/)?" + Pattern.quote(searchString) + "(/.*)?");
} else {
return false;
}
我确保searchString
不包含/
,然后将其作为literal with插入。正则表达式将确保在输入中的搜索字符串前后有一个/
,或者搜索字符串是输入中的第一个或最后一个标记。这还取决于生成的数组的大小。显然,contains()的第一个参数(input)可能并不总是“abc”这个ExPR意味着从ABC/ON/ABC/java开始,在中间或结尾,ABCOSH()的第一个参数(输入)可能并不总是“abc”。@ LabbHutalgJeEE我完全相信您的Java技巧来进行必要的修改。
if (!searchString.contains("/")) {
return input.matches("(.*/)?" + Pattern.quote(searchString) + "(/.*)?");
} else {
return false;
}