如何添加 html 标签但仍然保持空格不变?
How to add the html tags but still keep the spaces intact?
的面试题
我现在做的题是 "The second question is searching a particular word in a string, and add "" "<\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
,避免了原作者的错误,在"install"中搜索"all",他的代码会产生"install"。
但是 space 会成为问题吗?当传入
"Don't you love it "
,我的代码将生成 "Don't you love it",或者基本上是单词之间只有一个 space 的句子。你们认为这是一个问题吗?我有点这样做,因为客户可能不希望这种方法改变 spaces。会有解决方法吗?我觉得我需要使用正则表达式来分隔单词。
您可以在正则表达式中使用环视:
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)
是一个 负后视 这意味着前面的字符不是 space 而 (?=\s)
是 positive lookahead 这意味着后面的字符是 space。 See regex demo here.
不是在 \s+
上拆分,而是在 \s
上拆分——那样的话,它会在每个 space 上拆分,而不是在每组上拆分,当你把它们放回去时一起,spaces 的数量被保留。区别在于 +
告诉正则表达式拆分一个或多个 space,但没有它,它就是一个。
除此之外,我还建议使用 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
正如其他人所建议的那样,使用单个 space 拆分会更好。只是为了以不同的方式处理它,尝试 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>"));
}
我现在做的题是 "The second question is searching a particular word in a string, and add "" "<\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
,避免了原作者的错误,在"install"中搜索"all",他的代码会产生"install"。
但是 space 会成为问题吗?当传入
"Don't you love it "
,我的代码将生成 "Don't you love it",或者基本上是单词之间只有一个 space 的句子。你们认为这是一个问题吗?我有点这样做,因为客户可能不希望这种方法改变 spaces。会有解决方法吗?我觉得我需要使用正则表达式来分隔单词。
您可以在正则表达式中使用环视:
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)
是一个 负后视 这意味着前面的字符不是 space 而 (?=\s)
是 positive lookahead 这意味着后面的字符是 space。 See regex demo here.
不是在 \s+
上拆分,而是在 \s
上拆分——那样的话,它会在每个 space 上拆分,而不是在每组上拆分,当你把它们放回去时一起,spaces 的数量被保留。区别在于 +
告诉正则表达式拆分一个或多个 space,但没有它,它就是一个。
除此之外,我还建议使用 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
正如其他人所建议的那样,使用单个 space 拆分会更好。只是为了以不同的方式处理它,尝试 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>"));
}