我需要检查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;
}
}
控制台输出是: 真正 真正 假 假
答案 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
。正则表达式将确保输入中搜索字符串之前和之后存在/
,或者搜索字符串是输入中的第一个或最后一个标记。