2012-12-05 149 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]);