2011-06-28 248 views
2

Character[]转换为char[]String的最佳方法是什么?将字符[]转换为字符串

一种方法是手动循环当前在for(char c : CharacterArray)循环中的字符数组,并追加到StringBuilderStringBuilder似乎也直接接受了Character[],但是,这一切呢?

+0

@jleedev:认为我是一个类型安全的坚果:-) – Bhaskar

+1

@Bhaskar,几乎没有一个很好的理由使用'Character []'最好的办法是重构你的代码,所以你不要首先没有人。改用'char []'或者'StringBuilder'。 –

+0

@Peter Lawrey:我有一个泛型类型,其中一个泛型类型参数必须是'字符' - 我不知道任何其他方式来处理这个比使用一个字符,然后使我在提到的情况下。 – Bhaskar

回答

3

commons-lang有一个toPrimitive method,但在标准API中没有这样的东西。唯一的方法是遍历数组并将每个字符转换为char(并决定如何处理空值)。

2

我会建议使用一个简单的循环转换Character[]char[],然后通过它进入新的String();

Character[] characters = new Character[128]; 
    char[] chars = new char[characters.length]; 
    int length = characters.length; 
    for(int i=0; i<length; i++) { 
     chars[i] = characters[i].charValue(); 
    } 
    String string = new String(chars); 

另一种方法是创建通过StringBuilder环和单独添加每个字符。

Character[] characters = new Character[128]; 
    StringBuilder sb = new StringBuilder(characters.length); 
    for(Character c : characters) { 
     sb.append(c); 
    } 
    String string = sb.toString(); 

我有一种感觉,第一种方法可能更有效,但我不确定。

+0

如果你初始化'StringBuilder'具有足够的容量,第二种方式应该是有效的。 –

+0

的确,第一个要快得多。 'StringBuilder'每次都会重新创建一个比前一个字符大一个字符的新缓冲区。我检查了'StringBuilder'的Java源代码。除非你用给定的数组大小构造StringBuilder。然后,不需要重新创建缓冲区。那么表现将是一样的。 –

+0

实际上,如果你做'新的StringBuilder(characters.length);'它将是最有效的,如果附加和拆箱被JIT内联,因为构建器中的基础char []将用于结果字符串 –