如何生成随机数字字符串?现有两种方法仍复杂,求更简便方案
生成随机整数组成字符串的简便实现方法
你提到的两种方法确实可以优化,下面是几种更简洁高效的实现方式:
1. Stream + Collectors.joining()(Java 8+)
利用流API的Collectors.joining()直接完成字符串拼接,比你之前用reduce更简洁高效(内部用StringBuilder处理,避免多次创建字符串对象):
import java.util.Random; import java.util.stream.Collectors; import java.util.stream.IntStream; public class SimpleRandomString { public static void main(String[] args) { Random r = new Random(); String pageReferenceString = IntStream .generate(() -> r.nextInt(9)) .limit(100) .mapToObj(String::valueOf) .collect(Collectors.joining()); System.out.println(pageReferenceString); } }
2. 简化流写法:直接用Random.ints()
Random类自带的ints()方法可以直接生成指定数量、范围的整数流,省去手动生成流再限制长度的步骤:
import java.util.Random; import java.util.stream.Collectors; public class SimpleRandomString2 { public static void main(String[] args) { Random r = new Random(); String pageReferenceString = r.ints(100, 0, 9) .mapToObj(String::valueOf) .collect(Collectors.joining()); System.out.println(pageReferenceString); } }
3. 高性能写法:StringBuilder + 循环
如果追求极致性能,用StringBuilder代替字符串拼接(预先指定容量避免扩容),这是性能最优的实现方式:
import java.util.Random; public class FastRandomString { public static void main(String[] args) { Random r = new Random(); StringBuilder sb = new StringBuilder(100); for (int i = 0; i < 100; i++) { sb.append(r.nextInt(9)); } String pageReferenceString = sb.toString(); System.out.println(pageReferenceString); } }
补充说明
- 你原来的循环拼接字符串的方法效率很低,因为每次
+=都会创建新的字符串对象,而StringBuilder可以避免这个问题。 - 流写法里的
Collectors.joining()本质也是用StringBuilder实现的,兼顾了简洁性和性能。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

