关于索引(“”)

时间:2015-07-12 05:23:34

标签: java indexof spaces

String str = "1st 2nd 3rd 4th 5th 6th 7th 8th 9th 10th";

        int start = 0;
        int end = 0;

        int temp3 = str.indexOf(" ");
        int i = 0;
        int x = 6;

        while(i < x){
            System.out.println("current start: " + start);
            start = str.indexOf(" ", temp3);

            i++;
            temp3 += str.indexOf(" ");
        }
        end = str.indexOf(" ", start + 1);

        String sample = str.substring(start, end);
        System.out.println("HERE: " + sample);

我正在编写一个程序,允许用户输入数字并打印字符串中的特定位置,例如

String str = "1st 2nd 3rd 4th 5th 6th 7th 8th 9th 10th";

当用户输入0时,它打印第一个或当他输入1时,它打印第二个

所以我决定如何制作它的方法是找到包含特定字符串的两个空格的索引:“1st" or "2nd" or "3rd".....,并将这些索引分配给两个名为start和end的变量。作为子字符串的参数来打印特定的字符串

并且在上面的代码中,它一直有效,直到变量x为6,这里是输出:

current start: 0
current start: 3
current start: 7
current start: 11
current start: 15
current start: 15
HERE:  6th

它重复15次,字符串不应该是第6次,应该是:

0:1, 1:2, 2:3, 3:4, 4:5, 5:6, 6:7 等等...

并且不仅6,当可变x为10时,它也重复27次

我试图找到问题,但我不知道

有谁知道问题是什么?以及如何解决它?

谢谢

2 个答案:

答案 0 :(得分:1)

您的解决方案存在一些问题。字符串不会在空格上结束,因此如果您尝试在

处找到结尾
end = str.indexOf(" ", start + 1);

对于最后一个元素,你将获得-1。

此外,当您进入循环时,您希望temp3指向下一个空格位置,但您将temp指定为

temp3 += str.indexOf(" ");

这将总是为temp3添加3,但是当元素数量增加时,字符数不总是3,例如&#34; 10th&#34;需要4个字符,因此您无法在temp3上添加3个字符。

我认为你需要的东西就像

temp3 = start+1

你很快就会意识到你根本不需要temp3。

一个更简单的解决方案是按空格分割字符串,然后像这样返回第x个元素。

    String str = "1st 2nd 3rd 4th 5th 6th 7th 8th 9th 10th";

    int x = 6;

    String[] tokens = str.split(" ");

    System.out.println(tokens[x]);

答案 1 :(得分:0)

代码中有一些需要注意的事项,但主要是,您的错误归结为这一行:

start = str.indexOf(" ", temp3); // why temp3?

......结合莫名其妙的:

temp3 += str.indexOf(" "); // no idea what this is trying to do.

相反,只需完全删除temp3变量,然后像这样执行indexOf

start = str.indexOf(" ", start + 1); // start + 1: look right after the last space that was found.