在我的应用程序中,用户将从10个选项中选择多个选项。所选选项的数量可能在1到10之间变化。现在我尝试通过在数字之间插入逗号来分隔这些选定的选项。 我得到的数字是这样的:
123456
346
12
5
现在我试图像这样转换它们:
1,2,3,4,5
3,4,6
1,2
5(no comma)
为此,我正在尝试使用StringBuffer,但我得错了输出:
For 12 output is 1,2
For 5 output is 5
For 123 output is 1,,23
For 123456 output is 1,,,,,23456
你能帮我找到代码中的错误吗?
String str = jTextField1.getText();
StringBuffer sb = new StringBuffer(str);
int x = 0;
for (int i = 0; i < str.length() - 1; i++) {
sb.insert(++x, ",");
}
System.out.println(sb);
答案 0 :(得分:1)
您可以使用正则表达式以非常简单快速的代码实现它:
String num = "123456789";
String regex = "(\\d)(?=(\\d{1})+$)";
String commaSaperatedNums = num.replaceAll(regex, "$1,");
System.out.println( commaSaperatedNums);
答案 1 :(得分:0)
@ SMA的答案有效,但使用您的代码作为基础的另一种解决方案如下:
当您插入逗号时,您的StringBuffer正在增长,这会使您的x
索引与缓冲区的实际长度不同步,因此您需要在插入逗号后再将其递增一次。
class Test {
public static void main(String[] args) {
String str="123456";
StringBuffer sb=new StringBuffer(str);
int x=0;
for (int i = 0;i < str.length()-1; i++)
{
sb.insert(++x, ",");
x += 1;
}
System.out.println(sb);
}
}
答案 2 :(得分:0)
实际上发生了什么,你的x = 0最初,但是你插入'++ x'所以它进入'x-1'。但是在下一次迭代中,你再次执行'++ x',它将逗号存储在'x = 2'中,但实际上它应该存储在'x = 3'中,因为数组的大小已经增加。
试试这个。
String str=jTextField1.getText();
StringBuffer sb=new StringBuffer(str);
int x=-1;
for (int i = 0;i < str.length()-1; i++)
{
x+=2
sb.insert(x, ",");
}
System.out.println(sb);