2012-05-10 37 views
0

我操纵ssn。 输入=“123456789” 输出=“896745123”交换内容后建立新字符串的更好方法

您从输入(即123)取前3位数字,并用最后两个数字“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); 

    } 
+2

t这是完全线程安全的,高性能的最大限。没有解决方案可以打败你的硬编码映射。 –

回答

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); 
} 
+0

如果您对'System.arrayCopy'使用了多次调用,那么可能会导致性能的提升(也会减少代码)。 –

+0

甜(这是“输入至少15个字符”) – WowBow

+0

我想补充的一件事。我创建了一个方法,并将该逻辑放入该方法中,然后返回“out.toString()”。 out.toString返回的地址不是“out”的字符串表示。这是为什么?虽然返回新的String(out);工作正常。 – WowBow

相关问题