8

重複
の可能性: 文字列内の部分文字列の出現

件名のように、ある文字列に別の文字列が含まれている回数を確認する方法は? 例:

s1 "babab"
s2 "bab" 
Result : 2

Matcher を使用すると、最初の出現のみが認識されます。

String s1 = JOptionPane.showInputDialog(" ");
String s2 = JOptionPane.showInputDialog(" ");
Pattern p = Pattern.compile(s2);
Matcher m = p.matcher(s1);
int  counter = 0;
while(m.find()){
    System.out.println(m.group());
    counter++;
}
System.out.println(counter);

私はそのようにすることができますが、以下でJavaライブラリiike Scanner、StringTokenizer、Matcherなどを使用したいと思います:

String s1 = JOptionPane.showInputDialog(" ");
String s2 = JOptionPane.showInputDialog(" ");
String pom;
int count = 0;
for(int  i = 0 ; i< s1.length() ; i++){
    if(s1.charAt(i) == s2.charAt(0)){
        if(i + s2.length() <= s1.length()){
            pom = s1.substring(i,i+s2.length());
            if(pom.equals(s2)){
                count++;
            }
        }
    }
 }

 System.out.println(count);
4

5 に答える 5

4

ルルズのためのワンライナーソリューション

longStr入力文字列です。findStr検索する文字列です。longStrand であってfindStrはなら、少なくとも 1 つの文字が含まれている必要があることnullを除いて、前提条件はありません。findStr

longStr.length() - longStr.replaceAll(Pattern.quote(findStr.substring(0,1)) + "(?=" + Pattern.quote(findStr.substring(1)) + ")", "").length()

2 つの一致は、異なるインデックスで始まる限り異なると見なされ、重複が発生する可能性があるため、一致を区別し、一致した部分が重複することを可能にする方法が必要です。

秘訣は、検索文字列の最初の文字だけを消費し、先読みを使用して検索文字列の残りをアサートすることです。これにより、重複部分を再照合することができ、一致した最初の文字を削除することで、一致した数をカウントできます。

于 2012-12-19T13:45:05.863 に答える
2

文字列で探している単語がわかっている場合は、正規表現パターンを編集する必要があるかもしれません。

String string = "hellohellohellohellohellohello";
Pattern pattern = Pattern.compile("hello"); 
Matcher matcher = pattern.matcher(string);
int count = 0;
while (matcher.find()) count++;
于 2012-12-19T13:38:07.473 に答える
1

あなたはこのようにそれを行うことができます

private int counterString(String s,String search) {
    int times = 0;
    int index = s.indexOf(search,0);
    while(index > 0) {
        index = s.indexOf(search,index+1);
        ++times;
    }
    return times;
 }
于 2012-12-19T13:41:02.160 に答える
1

クラスMatcherには、最後の一致の開始インデックスと終了インデックスを返す2 つのメソッド「start」と「end 」があります。さらに、メソッドfindには、検索を開始するオプションのパラメータ「start」があります。

于 2012-12-19T13:37:22.163 に答える
0

Bruce Forte の簡単な解決策:

    String someString = "bababab";
    String toLookFor = "bab";
    int count = 0;
    for (int i = 0; i < someString.length(); i++) {
        if (someString.length() - i >= toLookFor.length()) {
            if (someString.substring(i, i + toLookFor.length()).equals(toLookFor) && !"".equals(toLookFor)) {
                count++;
            }
        }
    }
    System.out.println(count);

これにより3 が出力されますString

于 2012-12-19T13:36:46.377 に答える