创建一个具有 n 个字符的字符串。

26 浏览
0 Comments

创建一个具有 n 个字符的字符串。

在Java中有没有一种方法可以创建一个具有指定数量指定字符的字符串?在我的情况下,我需要创建一个包含十个空格的字符串。我的当前代码是:\n

final StringBuffer outputBuffer = new StringBuffer(length);
for (int i = 0; i < length; i++){
   outputBuffer.append(" ");
}
return outputBuffer.toString();

\n有没有更好的方法来完成相同的事情?特别是,我想要一个执行速度快的解决方案。

0
0 Comments

创建一个长度为n的字符串,这个问题的出现原因是作者想要以更少的代码行数来实现这个功能。解决方法是使用Arrays.fill方法来创建一个长度为n的字符数组,并将数组转换为字符串。

具体的解决方法如下:

char[] charArray = new char[length];
Arrays.fill(charArray, ' ');
String str = new String(charArray);

这个方法的原理是使用Arrays.fill方法将字符数组中的每个元素都设置为指定的字符,然后通过new String将字符数组转换为字符串。

作者还提到,如果在代码中一直使用Arrays.fill()函数来实现这个功能,并且在标准库和外部库中也使用了这个函数,那么这个函数有可能被Hotspot编译器视为内置函数,从而提高性能。如果自己编写函数来实现这个功能,就无法享受到这种性能优化。

另外,问是否可以将64位长整型的值写入长度为64/65的字符数组中。

0
0 Comments

问题的出现原因是因为在编程过程中,经常需要创建一个具有n个字符的字符串。但是手动编写循环来实现这个功能会导致重复劳动,并且阅读代码的人需要花时间来理解循环的含义。

解决方法是利用现有的库来实现这个功能,比如Apache Commons Lang库中的StringUtils.repeat函数。通过使用这个函数,可以避免手动编写循环,并且不用担心性能问题。如果函数执行速度较慢,那么这将是库的一个bug。在Java 11中,通过使用字符串的repeat方法更加简单。

然而,如果项目中尚未使用StringUtils库,为了实现一个简单的任务而添加另一个依赖可能有些过头。如果发现函数执行速度较慢,也可以提交自己的修复。

0
0 Comments

问题:如何创建一个包含n个字符的字符串?

原因:该问题的出现可能是因为需要在代码中创建一个指定长度的字符串。

解决方法:下面是两种解决方法。

第一种解决方法是使用String API,代码如下:

String space10 = new String(new char[10]).replace('\0', ' ');
System.out.println("[" + space10 + "]");
// 输出结果为 "[          ]"

第二种解决方法是创建一个方法来生成指定长度的字符串,代码如下:

import java.nio.CharBuffer;
public String spaces(int spaces) {
  return CharBuffer.allocate(spaces).toString().replace('\0', ' ');
}

可以通过以下方式调用该方法:

System.out.printf("[%s]%n", spaces(10));

即使我喜欢第一种方法的简洁性,但我认为FrustratedWithFormsDes的解决方法在执行速度上更好,因为它避免了检查每个字符是否为\0,并直接赋值为空格字符。

经过测试,该方法始终比循环更快,速度相对稳定,快了大约50000-100000纳秒,这可能是相当显著的(0.1毫秒)。尽管循环在迭代次数增加时会变得更快,但总体时间仍然较长。对于创建不同长度的字符串,这个结论仍然成立。

我在这里的回答中使用了这个很棒的解决方法:stackoverflow.com/questions/852665/…

0