我正在尝试从下面的字符串打印逗号分隔值
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
谢谢
以下是代码中的违规行:
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
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.
您可以像这样简单地使用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 Ë