13
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

文字列の繰り返しをシンプルに書きたい

Posted at
def repeat(str, n):
    return str * n 

文字列の内容をn回だけ繰り返した新しい文字列を生成したいという場合、Pythonでは上の例のように書くことができます。つまり*演算子が文字列を繰り返す機能を有しているのですが、同様のことをJavaで実現するとなると、次のようなメソッドを定義することが多いと思います(nullチェックなどは省略)。

public static String repeat(String str, int n) {
  var sb = new StringBuilder();
  while(n-- > 0) sb.append(str);
  return sb.toString();
}

別にこれでかまわないといえばそのとおりなのですが、Pythonでは1行で書けるのにJavaでは書けないというのは悔しい(謎)。そこでJavaで文字列の繰り返しをシンプルに書く方法をよく考えるのですが、個人的にまず思いつくのがStreamを使う方法。

public static String repeat(String str, int n) {
  return IntStream.range(0, n).mapToObj(i -> str).collect(Collectors.joining(""));
}

確かに1行にはなったものの、1行にするためにややトリッキーな書き方をしている印象も受けます。よりシンプルにすべく、いろいろ調べる中で思いついたのが以下の方法。

public static String repeat(String str, int n) {
  return String.join("", Collections.nCopies(n, str));
}

より短く、よりシンプルになりました。短くするためにトリッキーなことをするという感じもありません。Collections.nCopiesがリストを生成するため、そこだけ気にしつつ、積極的に使っていきたいと思います。

Apache Commons LangのStringUtils.repeatを使えばいいっていうのはいいっこなし(´・ω・`)

13
5
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?