当サイトは、アフィリエイト広告を利用しています
javaのArrayListを指定した区切り文字で文字列に変換する方法を
まとめる。
方法としては下記がある
配列を区切り文字列に変換する方法については下記記事でまとめています。
また当ブログで紹介しているjava8のstreamAPIを使った
コレクションや配列の操作方法を
下記記事でメソッド別にまとめています!
Collectorsクラスのjoiningメソッドを使って文字列に変換できる
import java.util.*;import java.util.stream.Collectors;import java.util.stream.*;public class Main {public static void main(String[] args) throws Exception {// 文字列List作成List<String>strList = Arrays.asList("ta","ti","tu");// 文字列に変換String joined = strList.stream().collect(Collectors.joining(":"));System.out.println(joined);}}
オブジェクトのListを文字列にする場合はオブジェクトの元のクラスで
toStringメソッドをオーバーライドする必要がある。
public class Person {private final int id;private final String name;private final String address;private final int age;Person(int id,String name, String address,int age) {this.id = id;this.name = name;this.address = address;this.age = age;}public int getId() {return this.id;}public String getName() {return this.name;}public String getAddress() {return this.address;}public int getAge() {return this.age;}@Overridepublic String toString(){return "{" + this.id + " " + this.name + " " + this.address + this.age +"}";}}
mapとjoiningを使って文字列にする
import java.util.*;import java.util.stream.Collectors;import java.util.stream.*;public class Main {public static void main(String[] args) throws Exception {// Listを生成List<Person>list = new ArrayList<>();for(int i=0;i<3;i++){Person pobj = new Person(i,"Name"+i,"東京"+i,i+10);list.add(pobj);}// オブジェクトのカンマ区切り文字列にするString result = list.stream().map(v->v.toString()).collect(Collectors.joining(","));System.out.println(result);}}// {0 Name0 東京010},{1 Name1 東京111},{2 Name2 東京212}
オブジェクトリストを文字列にするケースはなかなかないと思うが。。。
オブジェクトリストの場合はJSON文字列にすることが多いので
paiza.ioで上記二つの動作確認をする
String.joinメソッド使ってもstreamと同じようにできる
import java.util.*;import java.util.stream.Collectors;import java.util.stream.*;public class Main {public static void main(String[] args) throws Exception {// 文字列List作成List<String>strList = Arrays.asList("ta","ti","tu");// 文字列に変換String joined = String.join(":",strList);;System.out.println(joined);}}//結果//ta:ti:tu
一度、区切り文字列を配列に変換してから、それをさらにlistに変換する
import java.util.*;import java.util.stream.Collectors;import java.util.stream.*;public class Main {public static void main(String[] args) throws Exception {// 文字列List作成List<String>strList = Arrays.asList("ta","ti","tu");// 文字列に変換String joined = String.join(",",strList);;System.out.println(joined);// listに戻すList<String>paramList = Arrays.asList(joined.split(","));System.out.println(paramList);}}// ta,ti,tu// [ta, ti, tu]
オブジェクトリストの場合はできなかった。
オブジェクトリストの場合は文字列ではなくJSON文字列に変換したほうが
扱いやすいのでそっちを使ったほうがいいと思う。
区切文字列がエスケープ文字の場合はエスケースシーケンスがいる
import java.util.*;import java.util.stream.Collectors;import java.util.stream.*;public class Main {public static void main(String[] args) throws Exception {// エスケープ文字の場合// 文字列List作成List<String>esStrList = Arrays.asList("ta","ti","tu");// 文字列に変換String joinedes = String.join("|",esStrList);;System.out.println(joinedes);// listに戻す(エスケープする)List<String>esList = Arrays.asList(joinedes.split("\\|"));System.out.println(esList);}}// ta|ti|tu// [ta, ti, tu]
上記二つを動作確認する
最近は値を文字列で扱わずともfrontからbackendに来た時に
フレームワーク(Spring)とかで変換されていることが多いが
レガシィなシステムを触ると以外と文字列変換と戻しを
使うことが多いのでまとめておく。
javaの技術書としては下記が参考になりました。
java8のSteramAPIについても詳しく書かれているのでおススメです!