创建一个具有 n 个字符的字符串。
创建一个长度为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的字符数组中。
问题的出现原因是因为在编程过程中,经常需要创建一个具有n个字符的字符串。但是手动编写循环来实现这个功能会导致重复劳动,并且阅读代码的人需要花时间来理解循环的含义。
解决方法是利用现有的库来实现这个功能,比如Apache Commons Lang库中的StringUtils.repeat函数。通过使用这个函数,可以避免手动编写循环,并且不用担心性能问题。如果函数执行速度较慢,那么这将是库的一个bug。在Java 11中,通过使用字符串的repeat方法更加简单。
然而,如果项目中尚未使用StringUtils库,为了实现一个简单的任务而添加另一个依赖可能有些过头。如果发现函数执行速度较慢,也可以提交自己的修复。
问题:如何创建一个包含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/…