0

Java 6の API を調べStringたところ、特定の部分文字列が特定の .xml 内に出現する回数を計算する方法が見つかりませんでしたString

たとえば、文字列に"is"orが何回出現するか知りたいです。"not""noisxxnotyynotxisi"

ループで長い道のりを歩むことはできますが、もっと簡単な方法があるかどうか知りたいです。

ありがとう。

編集:Java 6を使用しています。

4

3 に答える 3

4

org.apache.commons.lang.StringUtils.countMatchesメソッドが優先される可能性があります。

于 2011-03-31T15:11:26.547 に答える
2

外部ライブラリを使用せずString.indexOf(String str, int fromIndex);に、ループで使用できます。


更新この例は完全に機能します。

/**
 * @author The Elite Gentleman
 * @since 31 March 2011
 *
 */
public class Test {

    private static final String STR = "noisxxnotyynotxisi";

    public static int count(String str) {
        int count = 0;
        int index = -1;

        //if (STR.lastIndexOf(str) == -1) {
        //  return count;
        //}

        while ((index = STR.indexOf(str, index + 1)) != -1) {
            count++;
        }

        return count;
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println(Test.count("is"));
        System.out.println(Test.count("no"));
    }
}
于 2011-03-31T15:10:22.303 に答える
0

これを行うことができますが、ループの方が高速です。

String text = "noisxxnotyynotxisinono";
String search = "no";
int count = text.split(search,-1).length-1;

System.out.println(Arrays.toString(text.split(search,-1)));
System.out.println("count= " + count);

版画

[, isxx, tyy, txisi, , ]
count= 5

ご覧のとおり、テキストが検索値で開始または終了する場合、これは正しいことです。-1 引数は、末尾の区切り文字の削除を停止します。

より効率的ですが、単純ではありません。

ところで: Java 5.0 は 2007 年 8 月から EOL になっています。おそらく、Java 6 に目を向ける時が来ました。(ドキュメントは非常に似ていますが)

于 2011-03-31T15:08:54.003 に答える