はじめに
私は現在、とあるSI企業に勤めていて、現在参画しているのがjavaの保守案件です。
保守開発中のシステムのバージョンが古く、残念ながらjava7を使用しています。
StringBuilderを使用して文字列連結(csv的な文字を生成するとき等)をする時に、**java8以上だったらStringJoinerで簡単にできるのに……**と思うことがたまにあります。
↓こういうの。
for (String hoge : 何かのリスト) {
if (sb.length() != 0) {
sb.append(",");
}
sb.append("連結したい文字列");
}
java7以下のプロジェクトに参画中で同じような悩みを抱えているSIerの人は私以外にもいるのではと思い、**StringJoinerと同じ振る舞いをする自作クラスを作成し、java7環境下で使えるようにライブラリとして公開**しました。
何でも良いので自作のライブラリを一般公開するという行為をしてみてかっただけです。
ということでjava7用にStringJoinerを自作しました
StringJoinerという名前のクラスを自作し、ライブラリとして公開しました。
実態としてはStringBuilderのラッパークラスです。
内部でStringBuilderを持っていて、delimiter、prefix、suffixをよしなに連結するだけのクラスです。
ソースはこちら↓
https://github.com/lovelyswallow/swallowJava8/blob/master/src/main/java/com/lovelyswallow/likejava8/util/StringJoiner.java
java7でStringJoinerを使うための準備
下記URLにアクセスしてjarを直接ダウンロードするなり、gradle等でjarの取得をするだけです。
java7ではjava.util.StringJoiner
が使えないので、
代わりにcom.lovelyswallow.likejava8.util.StringJoiner
をimportすれば、java標準のStringJoinerと同じ使い方ができます。
https://mvnrepository.com/artifact/io.github.lovelyswallow/swallowJava8
1.0はミスって**java12でコンパイルをしてしまっているので、ターゲットとしている肝心のjava7環境下では動作しません(笑)
使用する際は1.1以上をご利用ください。
1.1と1.1.1は中身が同じです。1.1.1はマイナーバージョンを上げる**という行為をしたくて空リリースをしただけです。
StringJoinerの使い方
java標準のStringJoinerと同じメソッドを用意しているので、全く同じ使い方ができます。
java標準と違うのはコンストラクタの種類だけです。
今更説明する必要もないかもしれませんが、一応、使い方の例を書きました。
import com.lovelyswallow.likejava8.util.StringJoiner;
final class Test {
public static void main(String[] args) {
StringJoiner sj1 = new StringJoiner(",");
sj1.add("hoge");
sj1.add("fuga");
sj1.add("piyo");
System.out.println(sj1.toString()); // => hoge,fuga,piyo
StringJoiner sj2 = new StringJoiner(",", "prefix", "suffix");
sj2.add("hoge");
sj2.add("fuga");
sj2.add("piyo");
System.out.println(sj2.toString()); // => prefixhoge,fuga,piyosuffix
// 実態はStringBuilderのラッパークラスなので、コンストラクタでcapacityの指定をできます。
StringJoiner sj3 = new StringJoiner(",", 100);
StringJoiner sj4 = new StringJoiner(",", "prefix", "suffix", 100);
}
}
最後に
最初に言った通り、以下の人に向けたライブラリとなっているので、現在ではあまり使い道はありません。
- SIerの人
- java7の現場に参画中
- プロジェクトの都合でjavaのバージョンアップができない
- java8で生まれたAPIを使いたい
同じ悩みを抱えているSIerの方は私以外にもいると信じて今回このライブラリを作りました。
今後はStringJoiner以外にもjava7環境向けに何かjava8っぽいクラスを作成したいと考えています。
とは言え、Streamっぽい振る舞いをする何か作ったところでラムダ式が使えないと微妙かもしれないけど。。。
がんばろう日本