我想用其中一个替换相同的单词
"p1 p2 p2 p2 p2 p3 p3 p4 p5 p5 p5 p5 p5 p2 p2 p1 p1 p1"
改变这个
"p1 p2 p3 p4 p5 p2 p1"
java中有没有方法可以做到这一点?
答案 0 :(得分:2)
您可以使用正则表达式。
String text = "p1 p2 p2 p2 p2 p3 p3 p4 p5 p5 p5 p5 p5 p2 p2 p1 p1 p1";
System.out.println(text.replaceAll("(\\w+)(\\s+\\1)+", "$1"));
输出:
p1 p2 p3 p4 p5 p2 p1
(\\w+)
将匹配单个单词,并且由于括号,它将被放置在第1组(\\s+\\1)+
\\s+
表示一个或多个空格,而\\1
需要与第1组相同的匹配。围绕此(...)+
要求它存在一次或多次< / LI>
$1
来获得存储在第1组中的匹配(因此我们用第一个单词替换许多相同的单词)。 答案 1 :(得分:1)
这是一个解决方案:
public static void main(String[] args)
{
String s = "p1 p2 p2 p2 p2 p3 p3 p4 p5 p5 p5 p5 p5 p2 p2 p1 p1 p1";
String[] parts = s.split(" ");
ArrayList<String> arr = new ArrayList<String>();
arr.add(parts[0]); // Add first item
for (int i = 1; i < parts.length; i++) {
if (!parts[i - 1].equals(parts[i])) { // Check if last item is different
arr.add(parts[i]);
}
}
StringBuilder sb = new StringBuilder();
for (String str: arr) { // Creating the new String via StringBuilder
sb.append(str);
sb.append(" ");
}
System.out.println(sb.toString());
}
<强>输出:强>
p1 p2 p3 p4 p5 p2 p1