2012-12-05 146 views
1

所以我從一個文件中的一行,看起來正在讀這樣的:的Java的indexOf返回-1

Snowman:286:355:10 

這是代碼的第一部分,我寫分開的數據並將其放入數組。

for (int i = 0 ; i<manyItems; i++) 
       { 
        a = 0; 

        temp = scan.nextLine(); 
        System.out.println(temp); 

        b = temp.indexOf(':'); 
        System.out.println(b); 

        items[i] = temp.substring(a,b); 
        System.out.println(items[i]); 
        System.out.println(temp); 

        a = b; 

        System.out.println(temp); 

        b = temp.indexOf(a+1,':'); 
        System.out.println(b); 

        rawX[i] = temp.substring(a+1,b); 
        System.out.println(rawX[i]); 


       } 

它它分離「雪人」的地方入陣,但是,當我試圖找到第二個冒號,的indexOf()保留返回-1。有誰知道爲什麼它沒有找到第二個冒號?

回答

7

你可以保存所有的代碼,並使用String#split分割線:

String[] parts = temp.split(":"); 
4

我覺得你的觀點倒退:

b = temp.indexOf(a+1,':'); 

應該是...

b = temp.indexOf(':', a+1); 

來自docs.oracle.com

public int indexOf(int ch, 
       int fromIndex) 

的第一個參數是ch aracter,第二如果fromIndex

+0

是的。太糟糕了,這並沒有成爲編譯錯誤(因爲這個字符也是一個int)。 – Thilo

+0

因爲char和int是可以互換的。 – sarcan

+0

這是http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#indexOf(java.lang.String,int) – tojofo

4

因爲您交換了indexOf調用的參數。它期望角色,然後指標開始看。請記住,字符是整數,您正在查找以':'的int值開始的char 7。

+0

+1點好眼睛! (和原始類型的知識) –

+0

'substring'如何期望一個字符?它的簽名是'substring(int beginIndex)'和'substring(int beginIndex,int endIndex)'。 ? –

+0

@RichardJPLeGuen:現在s/substring/indexOf/fixed。 – Thilo

0

根據String類有一種方法可以爲您處理工作。 Split(regEx pattern)是你可能想要使用的。以下代碼將完成您要執行的工作:

String input = "Snowman:286:355:10"; 

    String tokens [] = input.split(":"); 

    for (int i = 0; i < tokens.length; i++) 
     System.out.println(tokens[i]);