交换内容后构建新字符串的更好方法

时间:2012-05-10 21:11:50

标签: java string thread-safety char stringbuilder

我在操纵ssn。   输入=“123456789”   输出= “896745123”

您从输入端获取前3位数字(即123)并将其与最后两位数字“89”交换,然后将“45”与“67”交换。下面是我使用toCharArray的代码。但我不喜欢它。许多用户一次可以访问此方法(不是测试)。我一直在寻找更好的性能,可读性和贸易安全解决方案。

感谢您的帮助。

@Test
    public void testSSNString(){

        String original="123456789";
        String result="896745123";
        char[] charResult=original.toCharArray();

        char temp=charResult[6];
        charResult[6]=charResult[0];
        charResult[0]=charResult[7];
        charResult[7]=charResult[1];
        charResult[1]=charResult[8];
        charResult[8]=charResult[2];
        charResult[2]=charResult[5];
        charResult[5]=charResult[4];
        charResult[4]=charResult[3];
        charResult[3]=temp;

        assertEquals(original.toCharArray(),charResult);

    }

1 个答案:

答案 0 :(得分:1)

在性能方面,您给出的方式基本上是您在Java中可以做的最好的方式。使用数组比使用StringBuilder更快。

为了提高可读性,我只做了一些小改动,比如为置换输出创建一个新数组:

@Test
public void testSSNString() {
  String original = "123456789";
  String expected = "896745123";

  char[] in = original.toCharArray();
  char[] out = new char[9];
  out[0] = in[7];
  out[1] = in[8];
  out[2] = in[5];
  out[3] = in[6];
  out[4] = in[3];
  out[5] = in[4];
  out[6] = in[0];
  out[7] = in[1];
  out[8] = in[2];

  assertEquals(expected.toCharArray(), out);
}