给定[“crane", "drain", "refrain”]
之类的字符串数组以及*an*
之类的模式,其中*可以匹配任意数量的字符。
以有效的方式返回匹配的单词。 (在此示例中为"crane"
)
我可以用非常简单的方式解决它:
String [] array = {"crane", "drain", "refrain"};
String pattern="an";
for(String s:array){
if(s.contains(pattern)){
System.out.println(s);
}
}
有没有办法优化java中的代码性能?考虑数组可以包含大量字符串。
答案 0 :(得分:1)
您可以使用正则表达式(正则表达式)进行尝试。
public class RegexExample3{
public static void main(String args[]){
String [] array = {"crane", "drain", "refrain"};
for(String s:array){
if(java.util.regex.Pattern.matches(".*an.*", s))
System.out.println(""+s);
}
}
}
如果有人不了解正则表达式并希望了解它,那么这是link。
答案 1 :(得分:0)
好吧,如果您想检查一个单词是否匹配某个模式而不使用任何正则表达式,则包含..etc 我建议对模式进行编码,如果您对一个单词进行编码,将具有相同的哈希值...
但是,在您的情况下,我建议您这样做:
static String EncodeString(String x){
String output="";
for(int i=0;i<x.length();i++){
// *an* == 0110
char c=x.charAt(i);
if(c=='n'|| c=='a'){
output +="1";
} else {
output +="0";
}
}
return output;
}public static void main(String args[])
{
String pattern="*an*";
String enPattern=EncodeString(pattern);
String word="xyanxvsdanfgh";
String enWord=EncodeString(word);
System.out.println(enPattern+" "+enWord);
int v1=Integer.parseInt(enPattern);
int v2=Integer.parseInt(enWord);
System.out.println(" % :"+ v2%v1);// notice here if word not match the pattern then the MOD operation will NOT return 0
}
答案 2 :(得分:-2)
分配要求返回 匹配字,因此假设是,有一个字,只有一个字匹配。
如果只有一个单词,那么提前返回是有效的,而不是循环。你一直很亲密。
String matching (String pattern, String [] array) {
for (String s:array)
if (s.contains (pattern))
return s;
return "";
}
考虑替代方案,如何针对Regex.pattern.matches测量s.contains(模式),需要生成多少个案例才能找到差异。如果不进行测量,您就不确定它的效率是否不高。也许该模式应该预编译?
在这样的作业中,假设你仔细引用它,你通常必须非常谨慎地采取一切措施。
人们通常对某个主题有很好的想法,并且可能会毫不犹豫地实现他们的第一个想法。不要这样做!
给出一系列字符串,如[“crane&#34;,&#34; drain&#34;,&#34; refrain”]和a 模式,例如 an ,其中*可以匹配任意数量的字符。
以有效的方式返回匹配的单词。 (在这个例子中, &#34;吊车&#34)
对每一次违反你期望的行为都要非常明智。要求返回匹配的单词。你有没有注意到这个奇怪的案例?在有效方式的背景下,这意味着什么?
当然,你必须要了解你的老师,他是否有点草率或不流利的语言,他使用。但是,合并在一起的方法接口在软件开发和仔细阅读规范方面也是一个大问题。你很快就会把很多时间花在一个有效的解决方案上,但并不适合这个问题。
返回一个空字符串可能不是最好的想法,但对于该级别来说似乎已经足够了,没有进一步的上下文,很难确定,如果没有找到任何适当的反应。同样,措辞表明,只有一种解决方案。