4

特定の単語について、隣り合って表示されるすべての部分文字列を少なくとも3回検索し、それらすべてを1つだけに置き換えたいと思います。サブストリングが1文字しかない場合にこれを行う方法を知っています。たとえば、次のコードは、入力文字列「Bahhhhhhh」に対して「Bah」を返します。

String term = "Bahhhhhhh";
term = term.replaceAll("(.)\\1{2,}", "$1");

ただし、「バハハハハ」を「バハ」に変換する、より一般的なパターンが必要です。

4

2 に答える 2

6
    String[] terms = { "Bahhhhhhh", "Bahahahaha" };
    for (String term : terms) {
        System.out.println(term.replaceAll("(.+?)\\1{2,}", "$1"));
    }

出力:

Bah 
Baha
于 2012-06-07T15:29:42.370 に答える
2

これは、1、2、または3文字の長さの繰り返しで機能します。

String term = "Bahhhhhhh";
term = term.replaceAll("(.{1,3})\\1{2,}", "$1");

バックトラックのパフォーマンスが大幅に低下しないように注意する必要があります。そのため、1〜3文字に制限しました。

于 2012-06-07T15:27:40.717 に答える