web-dev-qa-db-ja.com

indexOfは、文字列内の単語のすべての出現を検索します

IndexOfを使用して、文内の文字「the」のすべての出現箇所を検索しようとしています。たとえば、「先日あそこに行った」という文の場合、3が返されます。

最初のインデックスが見つかるまでこれを行うことはできますが、ループの書き方がわかりません。元々、文字列全体を検索するforループがありましたが、指定した文字の出現ではなく、文字列全体の文字長を返していました。単語のすべての出現を見つけるループを作成するにはどうすればよいですか?ありがとうございました。

import Java.util.Scanner;

public class TheFinder
{
    public static void main (String[] args)
    {
        String theString = "";
        Scanner enter = new Scanner(System.in);

        System.out.println("Please enter a sentence: ");
        theString = enter.nextLine();
        int counter2 = 0;
        theString.indexOf("the");

        if (theString.indexOf("the")!= -1)
        counter2++;



        System.out.printf("The characters 'the' were found %d times", counter2);
        System.out.println();

        System.out.println("This was programmed by -----");
4
srmjr

インデックスを追跡できます。

int index = theString.indexOf("the");
while(index >= 0) {
    index = theString.indexOf("the", index+1);
    counter2++;
}
8
Carlos Afonso

あなたは複雑なアプローチを取りました。これを試して:

_int count = str.split("the").length - 1;
_

どうしてもindexOf()を使用する必要がある場合:

_str = str.toLowerCase();
int count = 0;
for (int i = str.indexOf("the"); i >= 0; i = str.indexOf("the", i + 1))
    count++;
_
5
Bohemian

indexOf(String str)メソッドは、firstオカレンスのstrのインデックスを検索します。したがって、allstrの発生を見つけたい場合は、strのインスタンスを見つけたら文字列を切り取り、str内でtheStringをもう一度探すループを実装することをお勧めします。 theStringにはもうありません。これがどのように見えるべきかです、

int index = theString.indexOf("the")
int count = 0;
while(index >= 0 && theString.length() > 0){
     count++;
     theString = theString.substring(0, index + "the".length());
     index = theString.indexOf("the");
}
1
Chris Gong

特にindexOfを使用したい場合(これは割り当て用だと思います)、再帰的な方法を使用できます。

public static String numMatches (String str, String query) {
    int index = str.indexOf(query);
    if (index == -1) 
        return 0;
    else
        return 1 + numMatches(str.substring(index + query.length), query);
}
1

indexOfは2番目の引数を取ることができます 文字列のどこから開始するかを示します。したがって、最初のオカレンスを見つけたら、そのインデックスの後の文字列のみを検索するようにindexOfに指示できます。

このコードは機能するはずです:

public static void main(String[] args) {
    String theString = "The other day I went over there.";
    theString = theString.toLowerCase();

    int index = -1;
    int count = 0;

    while (true) {
        index = theString.indexOf("the", index + 1);
        if (index == -1) {
            break;
        } else {
            count += 1;
        }
    }

    System.out.printf("The string 'the' was found %d times.\n", count);

    // Output:
    // The string 'the' was found 3 times.
}
1
smarx

これにより、文字列内の文字列の出現回数がチェックされます。

             String str = oIn.nextLine();
             String st = oIn.nextLine();
             int countS = 0;
             int index3 = str3.indexOf(st);
             while (index >= 0){
             index = str.indexOf(st, index+1);
             countS++;          
             }
             System.out.println("The number of occurrences of "+st +" in the string " +str3 +" are "+countS);
0
JavaFTW

たぶんあなたはこのようなことをすることができます、あなたはindexOf(String str)を使うことができます

String Word = "We are students of the Department of Informatics. All students should know how to program in Java and C.";

    int findit = Word.indexOf("students");
    int count = 0;

    for(int i=0; i<=findit; i++)
    {

        findit = Word.indexOf("students" , findit + 1);

        count = count + 1;

    }

    System.out.print(count);
0
Mathias Stavrou