UDF2<String, String, Boolean> contains = new UDF2<String, String, Boolean>() {
private static final long serialVersionUID = -5239951370238629896L;
@Override
public Boolean call(String t1, String t2) throws Exception {
Pattern p1 = Pattern.compile(t1);
Pattern p2 = Pattern.compile(t2);
return p1.toString().contains(p2.toString());
}
};
spark.udf().register("contains", contains, DataTypes.BooleanType);
在上面找到其他字符串中的键,如果找到它return true
,但它也会返回t2
的子字符串。
实际输出:
t1 Hello world
t2:Hello
t2 :wo
t2:rl
t2:Hello world
t1 returns all this 3 but i want only hello or world key
我试试这个
Pattern p1 = Pattern.compile("^"+t1+"$");
Pattern p2 = Pattern.compile("^"+t2+"$");
return p1.toString().contains(p2.toString());
但如果t2
包含Helow world
,则有效
我希望Hello OR world
任何人出现return True
你能帮我写一下Reguler Expression
答案 0 :(得分:0)
您的问题不是很清楚,但基本上您不需要正则表达式来检查另一个字符串中的子字符串是否可以使用
boolean isSubstring = t1.contains(t2);
如果t2
确实是正则表达式,而不是常规字符串,则需要从中创建Pattern
对象(就像您一样),然后创建一个{ {1}}在您要检查的字符串上,然后使用Matcher
方法
Matcher.find()
答案 1 :(得分:0)
你不需要使用正则表达式,你可以只使用String :: contains方法,这里有一个简单的例子:
String line = "Hellow My best world of java";
String str = "Hello world";
String[] spl = str.replaceAll("\\s+", " ").split(" ");
boolean check = true;
for(String s : spl){
if(!line.contains(s)){
check = false;
break;
}
}
System.out.println(check ? "Contain all" : "Not contains all");
这个想法是: