在Java中创建长度为'x'的字符串的最快方法全部由char'c'组成[重复]

Posted

技术标签:

【中文标题】在Java中创建长度为\'x\'的字符串的最快方法全部由char\'c\'组成[重复]【英文标题】:Fastest way to create String of length 'x' all composed of char 'c' in Java [duplicate]在Java中创建长度为'x'的字符串的最快方法全部由char'c'组成[重复] 【发布时间】:2017-10-23 11:38:47 【问题描述】:

我有一个应用程序正在为旧应用程序创建平面文件。创建平面文件时常见的情况是必须用零或空格“填充”空字段。今天,解决这个问题的方法是让所有类为这个填充空间创建一个字符串文字,这很难看,很难阅读和验证给定字段的长度。

我想用如下的通用函数替换它:

public String pad(int len, char c) 
    StringBuffer sb = new StringBuffer();
    for (int i=0; i<len; i++) 
        sb.append(c);
    
    return sb.toString();

但是我担心性能,因为这个函数将在代码库中相当普遍地使用。然后我的想法倾向于将此函数包装在缓存中(多键哈希图,又名哈希表),但我觉得必须有一种更标准的方式来做这样的事情。

实现这个目标最不傻的方法是什么?

【问题讨论】:

如果您知道字符串的长度,您应该将该长度传递给StringBuilderStringBuffer sb = new StringBuffer(len); 此外,您应该在这里使用StringBuilder,而不是StringBuffer,因为您不知道'不需要后者的线程安全特性。 见How can I pad a String in Java 最快的不一定是最不傻的。如果可维护性更重要,那么有很多第三方库都有字符串填充功能。但是,如果性能确实是您的主要优先事项,那么您应该内存映射文件并使用直接ByteBuffer 写入填充字符。 【参考方案1】:

如果重要的是性能,我会建议

public static String pad(int len, char c) 
    char[] charArray = new char[len];
    Arrays.fill(charArray, c);
    return new String(charArray);

【讨论】:

快点打败我吧。【参考方案2】:

如果您不想使用第三方库(您应该这样做,因为它们对正在发生的事情更明显),您可以这样做:

public String pad(int len, char c) 
    final char[] array = new char[len];
    Arrays.fill(array, c);
    return new String(array);

【讨论】:

代码很好,但我强烈不同意您关于第三方库的说法。依赖项使程序的可移植性降低,并且大多数第三方库管理不善。 我明白了,但在这种情况下,我认为您很难指责 Apache 公共库管理不善。我多次尝试(但都失败了)重新发明***,因为我认为我可以稍微做得更好。【参考方案3】:

如果你使用的是 java 8,那么使用 join 函数:

String.join("", Collections.nCopies(numberOfTimes, repeatString));

否则使用,

return  new String(new char[numberOfTimes]).replace("\0", repeatString);

【讨论】:

以上是关于在Java中创建长度为'x'的字符串的最快方法全部由char'c'组成[重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用 mptt 在 Python / Django 中创建 JSON 以反映树结构的最快方法

在 C# 中创建加密随机数的最快、线程安全的方法?

在 Windows Azure 中创建测试表存储时增加默认字符串值长度

试图从一个 np 数组中创建一个可读的 txt 文件,全部打印在一行上?

Java中创建数组的几种方法

在 JAVA 中创建给出长度和值范围的随机 Int 数组