在java中用其中一个替换字符串中的相同单词

时间:2014-01-25 16:18:22

标签: java string

我想用其中一个替换相同的单词

 "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中有没有方法可以做到这一点?

2 个答案:

答案 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组
  • 中 {li} in (\\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