输入字符串:
String input = "Lorem Ipsum is simply dummy text of the printing and typesetting industry";
输出字符串:
String output = "Lorem Ipsum simply dummy printing typesetting industry";
删除短语的最佳方法是什么?
这是我的第一个想法:
private String removeShortWords(String string){
int minLength = 5;
String result = "";
String[] words = string.split("\\s+");
for (int i = 0; i < words.length; i++){
String word = words[i];
if(word.length() >= minLength){
result += word + " ";
}
}
return result;
}
答案 0 :(得分:9)
一行:
String output = input.replaceAll("\\b\\w{1,4}\\b\\s?", "");
答案 1 :(得分:1)
你的方法很好,除了:
StringBuilder
代替+=
。我会做那样的事情:
迭代字符串,只要我有char
,我递增一个计数器并将char添加到某个临时字符串,否则,我有一个空格。我检查计数器的值,如果它是<= 5
我不添加临时字符串,否则,我这样做。这样我也保留了空间。
关于复杂性,当n
是String的长度时,它是O(n),因为我们只在String上“行进”一次。
答案 2 :(得分:1)
你接近是可以的,但出于性能原因,最好使用StringBuilder,因为+=
在循环的每次迭代中创建它。另请注意Maroun关于输出完整性的评论。
另一种选择是使用正则表达式,此调用应具有相同的效果:
return string.replaceAll("\\b\\w{1,4}\\b","");
请注意,出于性能原因,您需要预先编译模式并重新使用它。
答案 3 :(得分:0)
String input = "Lorem Ipsum is simply dummy text of the printing and typesetting industry";
String[] dev=input.split(" ");
for(int i=0;i<dev.length;i++)
if(dev[i].length()<=2)
input=input.replaceAll(dev[i], "");
答案 4 :(得分:0)
尝试使用StringTokenizer而不是Split,并使用StringBuilder创建结果
int minLength = 5;
StringTokenizer tokenizer = new StringTokenizer(input, " ");
StringBuilder builder = new StringBuilder();
while(tokenizer.hasMoreTokens()){
String token = tokenizer.nextToken();
if(token.length() >= minLength){
builder.append(token);
builder.append(" ");
}
}
return builder.toString();