可以将具有单个重复字符的java String初始化为特定长度

Ron*_*fin 50 java string initialization

我想创建一个具有以下签名的函数:

public String createString(int length, char ch)
Run Code Online (Sandbox Code Playgroud)

它应该返回一串指定长度的重复字符.

例如,如果length为5且ch为'p',则返回值应为

public String createString(int length, char ch)
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点,没有循环,直到它是所需的长度?
没有任何外部定义的常量?

Joe*_*tov 90

char[] chars = new char[len];
Arrays.fill(chars, ch);
String s = new String(chars);
Run Code Online (Sandbox Code Playgroud)

  • 真的很简单而且很有帮助。 (2认同)

Boz*_*zho 31

StringUtils.repeat(str, count) 来自apache commons-lang

  • @deGoot,因为你需要第三方库 (6认同)

Mik*_* B. 9

这是一个优雅的纯Java单行解决方案:

Java 1.5+:

String str = new String(new char[5]).replace("\0", "p"); // "ppppp"
Run Code Online (Sandbox Code Playgroud)

Java 11+:

String str = "p".repeat(5); // "ppppp"
Run Code Online (Sandbox Code Playgroud)

  • 看到所有的解决方案,我想知道 `String` 是否应该有一个像 `String(int size, char Filler)` 这样的构造函数或一个方法 `fillWith(char Filler)`。 (2认同)

T.G*_*lle 6

对于记录,使用Java8,您可以使用流来执行此操作:

String p10times = IntStream.range(0, 10)
  .mapToObj(x -> "p")
  .collect(Collectors.joining());
Run Code Online (Sandbox Code Playgroud)

但这似乎有些矫枉过正.

  • 为了避免生成和丢弃IntStream值`String p10Times = Stream.generate(() - >"p").limit(10).collect(Collectors.joining());` (2认同)