从String中提取逗号分隔值

问题描述 投票:0回答:3

我正在尝试从下面的字符串打印逗号分隔值

A,B,C,D,E

这是我的代码

String Inp = "A,B,C,D,E";
            StringBuilder op = new StringBuilder();
            int Idx = 0;
            int IdxUpto = 0;
            for(;;){

                IdxUpto = Inp.indexOf(",", Idx);
                if(IdxUpto==-1){
                    System.out.println("There is no more commas in String");
                    op.append(Inp.substring(Idx, Inp.length()));
                    System.out.println(op);
                    break;
                }
                op.append(Inp.substring(Idx, IdxUpto));
                Idx = IdxUpto;
                System.out.println(op);
            }   

因为循环在第一次提取后没有停止,任何人都可以帮助我做错了吗?

编辑:

预期产出

A
B
C
D
E

谢谢

java for-loop indexof
3个回答
1
投票

以下是代码中的违规行:

Idx = IdxUpto;

您应该增加加1,以考虑您还必须超过逗号分隔符,其宽度为1。所以使用这个:

Idx = IdxUpto + 1;

但请注意,您还有其他几个问题。首先,您应遵循Java约定并避免使用大写字母开始使用变量名称。此外,在这里使用while循环而不是没有指定标准的for循环可能更有意义。考虑到所有这些,这是脚本的工作版本:

String input = "A,B,C,D,E";
StringBuilder op = new StringBuilder();
int idx = 0;
int idxUpto = 0;
do {
    idxUpto = input.indexOf(",", idx);
    if (idxUpto == -1) {
        String term = input.substring(idx, input.length());
        op.append(term);
        System.out.println(term);
        System.out.println("There is no more commas in String");
        break;
    }
    String term = input.substring(idx, idxUpto);
    op.append(term);
    idx = idxUpto+1;
    System.out.println(term);
} while(true);

A
B
C
D
E
There is no more commas in String

0
投票

String的indexof api如下所示:

从指定的索引处开始,返回指定子字符串第一次出现的字符串中的索引。

当您输入for条件时,索引为1(您找到第一个逗号的索引位置)。现在你要做的是将Idx设置为这个索引,如下所示:

Idx = IdxUpto;

现在,由于api的索引开始从该索引搜索逗号,它继续说我在索引1处找到并且您继续尝试在索引1处搜索逗号。要解决此问题,请尝试添加如下所示:

Idx = IdxUpto + 1;

有几点需要注意:

一个。使用camel case变量命名约定。 湾您正在追加StringBuilder,如果您需要预期的输出,那么您的println语句应更改为:

System.out.println(Inp.substring(Idx, IdxUpto));//mutate Idx assignment after this print statement.

0
投票

您可以像这样简单地使用String.split()方法:

public class StringSplit {
  public static void main(String[] args) {
    String input = "A,B,C,D,E";
    String[] array = input.split(",");
    for (String letter : array) {
      System.out.println(letter);
    }
  }
}

输出:

一个 乙 C d Ë

© www.soinside.com 2019 - 2024. All rights reserved.