Java indexOf返回-1

时间:2012-12-05 00:33:37

标签: java

所以我正在从文件中读取一行,看起来像是:

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]);


                }

它将“Snowman”分隔成数组,但是,当我尝试找到第二个冒号时,indexOf()会一直返回-1。有谁知道为什么它没有找到第二个结肠?

4 个答案:

答案 0 :(得分:7)

您可以保存所有代码并使用String#split拆分该行:

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

答案 1 :(得分:4)

我认为你有倒退的论点:

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

应该......

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

来自docs.oracle.com

public int indexOf(int ch,
               int fromIndex)

第一个参数是ch字符,第二个参数是fromIndex

答案 2 :(得分:4)

因为您交换了indexOf调用的参数。它期待角色,然后索引开始看。请记住,字符是整数,你正在寻找从':'的int值开始的字符7。

答案 3 :(得分: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]);