我目前正在做的问题是“第二个问题是搜索字符串中的特定单词,并在单词的每个外观周围添加”< b>“”< \ b>“。
这是我的代码:
public class AddBsAround {
public static void main(String[] args) {
String testCase = "Don't you love it when you install all software and all programs";
System.out.println(addBs(testCase, "all"));
}
public static String addBs(String sentence, String word) {
String result = "";
String[] words = sentence.trim().split("\\s+");
for(String wordInSentence: words) {
if(wordInSentence.equals(word)) {
result += "<b>" +word + "</b> ";
} else {
result += wordInSentence + " ";
}
}
return result;
}
}
代码基本上产生正确的输出;也就是说,当在测试用例中传递时,它会产生
Don't you love it when you install <b>all</b> software and <b>all</b> programs
,避免了原作者的错误,因为在“安装”中搜索“all”,他的代码会产生“安装”。
然而这些空间会成为一个问题吗?传入时
"Don't you love it "
,我的代码会产生“你不喜欢它”,或者基本上是句子之间只有一个空格。你们认为这是一个问题吗?我有点做,因为客户端可能不希望这种方法改变空格。会有解决方法吗?我觉得我需要使用正则表达式来分隔单词。
答案 0 :(得分:1)
你可以在regex中使用lookarounds:
public static String addBs(String sentence, String word) {
String result = "";
String[] words = sentence.split("(?<!\\s)(?=\\s)");
for(String wordInSentence: words) {
if(wordInSentence.trim().equals(word)) {
result += "<b>" +word + "</b> ";
} else {
result += wordInSentence + " ";
}
}
return result;
}
<强>输出:强>
Don't you love it when you install <b>all</b> software and <b>all</b> programs
(?<!\\s)
是负面后瞻,这意味着前面的字符不是空格而(?=\\s)
是正向前瞻,这意味着以下字符是一个空间。 See regex demo here
答案 1 :(得分:1)
而不是拆分\\s+
,拆分\\s
- 这样,它会拆分每一个空间而不是每一个空间,当你把它们放回去时,空间数量保留下来。不同之处在于+
告诉正则表达式在一个或多个空格上分割,但没有它,它只是一个空格。
除此之外,我还建议您使用StringBuilder
来加入字符串,因为它对于很长的字符串效率更高,而且您希望尽可能做到最好,对吗?
这只是一个字符的变化,但为了完整起见,这是你的新方法:
public static String addBs(String sentence, String word) {
StringBuilder result = new StringBuilder();
String[] words = sentence.trim().split("\\s");
for(String wordInSentence: words) {
if(wordInSentence.equals(word)) {
result.append("<b>").append(word).append("</b> ");
} else {
result.append(wordInSentence).append(" ");
}
}
return result.toString();
}
}
使用此代码的结果如下:
Don't you love it when you install <b>all</b> software and <b>all</b> programs
答案 2 :(得分:0)
正如其他人所说,使用单一空间进行拆分会更好。只是以不同的方式处理它,尝试Java的模式。
public static String addBs(String sentence, String word) {
Pattern pattern = Pattern.Compile(word);
Matcher m = pattern.matcher(sentence);
return(m.replaceAll("<b>" + word + "</b>"));
}