【问题标题】:Converting Character[] to String将字符 [] 转换为字符串
【发布时间】:2011-06-28 20:50:17
【问题描述】:

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

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

【问题讨论】:

  • @jleedev : 把我想象成一个类型安全的螺母 :-)
  • @Bhaskar,几乎没有充分的理由使用Character[] 最好的办法是重构您的代码,这样一开始就没有。请改用char[]StringBuilder
  • @Peter Lawrey:我有一个泛型类型,其中一个泛型类型参数必须是 'char' - 除了使用 Character 之外,我不知道任何其他方法来处理这个问题,然后让我进入提到的情况。
  • @Bhaskar,你应该使用 StringBuilder 而不是 List。您使用的是什么类型的通用集合?
  • @Peter Lawrey:它是一张地图。我正在分析文本/单词并存储字母频率映射,以供其他代码进一步处理。

标签: java arrays character


【解决方案1】:

commons-lang 有一个toPrimitive method,但在标准 API 中没有这样的东西。唯一的方法是遍历数组并将每个 Character 转换为 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();
    

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

    【讨论】:

    • 如果你初始化StringBuilder有足够的容量,第二种方式应该是高效的。
    • 没错,第一个要快得多。 StringBuilder 每次都会重新创建一个比前一个字符大一个字符的新缓冲区。我检查了StringBuilder的Java源代码。除非您使用给定的数组大小构造 StringBuilder。然后,不需要重新创建缓冲区。那么性能将是相同的。
    • Foreach 的效率低于标准 for 循环。 String 也使用 StringBuilder 作为其实现,因此 String+= 没有负面性能。
    • @All 我更新了将长度添加到 StringBuilder 的构造函数。感谢您的建议。
    猜你喜欢
    • 2019-10-10
    • 2019-01-05
    • 2015-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-29
    相关资源
    最近更新 更多