im 尝试获取字符串并在字符串中每个单词的前面添加 + 以自动生成关键字
所以如果字符串是:绿羊
输出应为:+绿色+绵羊
有多种选择,我将专注于一个紧凑的正则表达式答案,该答案使用匹配所有单词边界的b
,甚至是像Green, sheep. Green - sheep
这样的复杂单词边界。
溶液
String text = "Green, sheep. Green - sheep";
String modifiedText = text.replaceAll("\b(\p{L}+)\b", "+$1");
System.out.println(modifiedText);
哪些输出:
+Green, +sheep. +Green - +sheep
京东演示
解释
详细的解释可以在regex101#K4k42n中看到。测试正则表达式的众多好网站之一。
简而言之,我们搜索单词\p{L}
(仅字母字符),其中的多个+
,在单词边界内\b
。然后将这些单词放入一个带有(...)
的捕获组中。在replaceAll
的第二个参数中,我们现在可以引用具有$
的捕获组,$1
对应于第一个捕获组的匹配,依此类推。
因此,我们将符号+
单词替换为单词本身$1
。
我们首先提取所有单词,然后操纵它们,最后将它们作为句子放回原处。
// Extract words
String[] words = theString.split(" ");
// Manipulate them
for (int i = 0; i < words.length; i++) {
words[i] = "+" + words[i];
}
// Put them back as sentence
StringJoiner sj = new StringJoiner(" ");
for (String word : words) {
sj.add(word);
}
String sentence = sj.toString();
StringJoiner
在每个参数(在构造函数中指定)之间添加一个" "
。
请注意,此方法仅适用于每个单词都由空格分隔的简单句子,而不是逗号、点等。
步骤:
1. 在空格的基础上拆分字符串。
2. 循环迭代。
3. 获取单个字符串并在前面添加"+",然后添加空格并将字符串添加到最后一个字符串
4.重复步骤 2 和 3,直到步骤 1 中获得的列表末尾。
发布逻辑/伪代码总是比发布代码更好。
希望这对你有帮助。