PHPのimplode関数をJavaで実装
概要
PHPのimplode関数のようなものをJavaで実装しました。
(追記) Java8にはjoinという関数があるそうです。
@nishemon さんコメントありがとうございます!
実装
/**
* Join list elements with a string
*
* @param stringList The list of strings to implode.
* @param glue The String for joining list.
* @return Returns a string containing a string representation of all the list elements
* in the same order, with the glue string between each element.
*/
public static String implode(List<String> stringList, String glue) {
StringBuilder stringBuilder = new StringBuilder();
int index = 0;
int size = stringList.size();
for (String value : stringList) {
stringBuilder.append(value);
if (index < size - 1) {
stringBuilder.append(glue);
}
index++;
}
return stringBuilder.toString();
}
(追記)汎用的な実装を教えていただきました。
@shiracamus さんコメントありがとうございます!
public static String implode(Iterable<? extends CharSequence> values, CharSequence glue) {
StringBuilder buffer = new StringBuilder();
CharSequence separator = "";
for (CharSequence value : values) {
buffer.append(separator).append(value);
separator = glue;
}
return buffer.toString();
}
(追記)またまた実装を教えていただきました。
@saka1029 さんコメントありがとうございます!
public static <T> String implode(List<T> list, String glue) {
StringBuilder sb = new StringBuilder();
for (T e : list) {
sb.append(glue).append(e);
}
return sb.substring(glue.length());
}
テスト
とりあえず簡単なのを一個だけ
@Test
public void testImplode() {
ArrayList<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
String glue = " ";
String actual = Util.implode(list, glue);
String expected = "A B C";
assertEquals(expected, actual);
}
PHPのimplode()
について
PHPのマニュアルを見ると、以下のように書いてあります。
注意:
implode()は、歴史的な理由により、引数をどちら の順番でも受けつけることが可能です。しかし、 explode() との統一性の観点からは、 ドキュメントに記述された引数の順番を使用する方が混乱が少なくなるでしょう。
また、PHPだとglue
のデフォルトは空文字列なのですが今回は考慮していません。
やるとしたらこんな感じにオーバーロードしたものを作るのもいいかもしれません。
public static String implode(List<String> stringList) {
return implode(stringList, "");
}
補足
間違っているところやもっといいやり方あったら教えてください!
参考
Author And Source
この問題について(PHPのimplode関数をJavaで実装), 我々は、より多くの情報をここで見つけました https://qiita.com/rkowase/items/7e73468d421c16add76d著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .