2016-07-27 114 views
1

我正嘗試使用indexOf在句子中查找所有出現的字符'the'。例如,如果句子是「有一天我去那裏」,它應該返回3.indexOf在字符串中查找所有出現的單詞

我能夠做到這一點,它發現第一個索引,但我不確定如何編寫循環。我原本有一個搜索整個字符串的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 -----"); 
+0

我會建議使用正則表達式進行搜索。 –

+0

你介意用正則表達式來解釋你的意思嗎? – srmjr

+1

重複的問題,該問題以前在[本文]中回答(http://stackoverflow.com/questions/275944/java-how-do-i-count-the-number-of-occurrences-of-a-char -in-a-string) – Hatley

回答

7

可以保證指數的軌跡:

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

不需要兩次'indexOf()'調用:'for(int idx = 0;(idx = theString。indexOf(「the」,idx))> = 0; idx ++){counter2 ++; }' – Andreas

3

您採取了複雜的方法。試試這個:

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++; 
+0

謝謝您的輸入,但是我想具體使用indexOf – srmjr

+0

@srmjr查看更新回答 – Bohemian

+0

謝謝。 .toLowerCase();用於搜索單詞的所有實例,而不管大小寫? – srmjr

1

indexOf can take a second argument,說哪裏來的字符串開始。所以,你會發現第一次出現後,你可以告訴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

indexOf(String str)方法找到第一個發生的str的索引。所以如果你想找到所有str發生的情況,那麼我建議只是實現一個循環,在該循環中,一旦找到str的一個實例,並在theString之內再次尋找str,直到它不再處於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"); 
} 
+0

這是錯誤的。 while循環將被鎖定在無限循環中,因爲變量'index'永遠不會更新。 –

+0

@JonathanJeffrey謝謝,我只是修復它。這是我的一個懶惰的錯誤。 –

1

如果要專門使用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); 
} 
0

也許你可以做這樣的事情,你可以使用的indexOf(字符串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

這將檢查字符串的許多事件是如何在字符串中。

   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); 
相關問題