如何在Java中的字符串中插入字符

时间:2015-03-01 07:24:49

标签: java stringbuffer

在我的应用程序中,用户将从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);

3 个答案:

答案 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);