如何使用正则表达式查找子字符串

时间:2017-05-25 07:43:34

标签: java regex

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

吗?

2 个答案:

答案 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");

这个想法是:

  1. 用空格分割你的文字
  2. 循环抛出此结果
  3. 检查你的字符串是否包含所有这些结果,如果不存在,则断开你的循环并返回false