无法在java字符串中找到字符的索引

时间:2016-02-12 18:29:51

标签: java

我在java程序中发现了一个非常奇怪的问题。我想在我的字符串中查找所有管道的索引并将它们保存为5个变量,但结果不正确。这是我的计划:

public class forTest {
    public static void main(String[] args){
        String tmp = "A|B|C|D|E|F|";
        int count = 0;
        int start = 0;
        int start1 = 0;
        int start2 = 0;
        int start3 = 0;
        int start4 = 0;
        for(int i = 0; i < tmp.length(); i++){
            if(tmp.substring(i, i+1).equals("|")){
                count = count + 1;
                System.out.println(i);
            }
            if(count == 1){
                start = i;
            }
            if(count == 2){
                start1 = i;
            }
            if(count == 3){
                start2 = i;
            }
            if(count == 4){
                start3 = i;
            }
            if(count == 5){
                start4 = i;
            }
        }
        System.out.println(start + "|" +start1 + "|" +start2
                                 + "|" +start3 + "|" +start4);
    }

输出:

Result is 1

1 3 5 7 9 11

2|4|6|8|10

1 个答案:

答案 0 :(得分:1)

在您进行迭代时,第一个|会将count增加到1,并设置start = 1,但是当您定位在{{1 },计数仍为1,B更新为start

使用2上的断点

调试会让您自己看到这个!

解决方案:将所有start = i;语句移到第一个语句中。

此外,if应为tmp.substring(i, i+1).equals("|"),并使用tmp.charAt(i) == '|'

else if

替代解决方案

使用正则表达式可以使用较短的代码来获得相同的结果:

for (int i = 0; i < tmp.length(); i++) {
    if (tmp.charAt(i) == '|') {
        count = count + 1;
        System.out.println(i);
        if (count == 1) {
            start = i;
        } else if (count == 2) {
            start1 = i;
        } else if (count == 3) {
            start2 = i;
        } else if (count == 4) {
            start3 = i;
        } else if (count == 5) {
            start4 = i;
        }
    }
}

或者如果您不喜欢,可以使用数组:

String tmp = "A|B|C|D|E|F|";
String regex = "(\\|).*?(\\|).*?(\\|).*?(\\|).*?(\\|)";
Matcher m = Pattern.compile(regex).matcher(tmp);
if (m.find()) {
    int start  = m.start(1);
    int start1 = m.start(2);
    int start2 = m.start(3);
    int start3 = m.start(4);
    int start4 = m.start(5);
    System.out.println(start + "|" +start1 + "|" +start2 + "|" +start3 + "|" +start4);
}

输出(来自两者)

String tmp = "A|B|C|D|E|F|";
int count = 0;
int[] start = new int[5];
for (int i = 0; i < tmp.length(); i++)
    if (tmp.charAt(i) == '|' && count < start.length)
        start[count++] = i;
System.out.println(start[0] + "|" +start[1] + "|" +start[2] + "|" +start[3] + "|" +start[4]);