2011-02-14 150 views
17

我對indexOf方法有疑問。我想在字符串中找到多個「X」的情況。適用於String中多個匹配的Java indexOf方法

假設我的字符串是「x是x是x是x」,我想在它的所有索引位置找到x。 但你如何做到這一點多個案件?這甚至有可能與indexOf?

我做了int temp = str.indexOf('x'); 找到第一個x。我試圖做一個for循環,其中我被初始化爲字符串的長度,並且這不起作用,因爲我一遍又一遍地找到第一個x。

for (int y = temp1; y >= 0;y--) 
{ 
    int temp = str.indexOf('x'); 
    System.out.println(temp); 
} 

但這不起作用。我應該使用正則表達式嗎?因爲我真的不知道如何使用正則表達式方法。

任何幫助將不勝感激,謝謝!

回答

37

indexOf方法有第二種變體,它將start-index作爲參數。

i = str.indexOf('x'); 
while(i >= 0) { 
    System.out.println(i); 
    i = str.indexOf('x', i+1); 
} 
+2

啊,非常感謝大家。這很有意義,因爲你只是根據上次匹配的位置遍歷字符串。 – Eric 2011-02-14 01:25:23

5

您可以指定indexOf開始索引。因此,在循環中存儲'x'的最後一個位置,然後使用該索引+ 1再次搜索。

2

對於這裏不同的方法是你可以把它在Java 8流API,

String text = "Lets search for E ?"; 

final char key = "e".charAt(0); 
int[] indices = IntStream.range(0, text.length()) 
         .filter(i -> text.charAt(i) == key) 
         .toArray(); 
//output 
//1 
//6 

,如果你想找到的大寫字母「E」用小寫字母「e」你可以改變濾波器的參數有:

.filter(i -> Character.toLowerCase(text.charAt(i)) == key) 

輸出將是:

//1 
//6 
//16 

此外,如果你不想在陣列收集,如果你只是想打印出來,以便快速測試的目的,你可以做到這一點:

IntStream.range(0, text.length()) 
     .filter(i -> text.charAt(i) == key) 
     .forEach(System.out::println); 
0
String name = "alameer kaiser aziz"; 
String found = "a"; 
int num = name.indexOf(found); 
while (num >=0) { 
    System.out.println(num); 
    num = name.indexOf(found,num+1); 
} 
相關問題