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

标签 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);

    }

最佳答案

就性能而言,您给出的方法本质上是您在 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);
}

关于java - 交换内容后构建新字符串的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10542208/

相关文章:

c++ - 我希望 cin 读取到 '\n' 但我不能使用 getline

java - 如何从第一帧文本字段输入文本到第二帧文本区域获取输出

java - GAE cron 每天之间的间隔

python - 如何让 urllib2 以数组形式返回数据

c - 将字符串添加到数组

java - 实现不抛出 InterruptedException 的接口(interface)时处理 InterruptedException 的正确方法

python - 在 Python 中使随机模块线程安全

java - 如何在POM中获取maven版本号

java - 网 bean : How to start a Derby Database programmatically

java - 新线程是否具有所有其他线程先前对共享对象的操作的完全内存可见性?