始めに
昨日、文字列の部分配列を取得するプログラムを掲載しましたが、もっと改良するべき箇所があったので改良版を掲載します
改良点
- 切り出し位置の座標を列挙し、決定した座標をもとに文字列を切り出す実装に変更した
- Java8のストリームAPIを使ってみた
実装コード
TestClaoo.java
package test;
import java.awt.Point;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class MyFuncTest2 {
public static void main(String args[])throws Exception{
String sample = "ABCDE";
System.out.println(
makeList(sample.length()) //文字列の要素分、切り出し位置を決定する座標のListを生成する
.stream() //Listをストリームに変換する
.filter(a-> a.x <= a.y) //x座標がy座標より小さいものをListから抽出し
.map(mapper -> sample.substring(mapper.x,mapper.y+1)) //抽出した座標を用いて部分文字列を切り出し
.collect(Collectors.toList()) //streamをリストに変換する
);
}
//引数で指定した数値の分、座標を生成する
public static List<Point> makeList(int num)throws Exception{
List<Point> kridashi = new ArrayList<Point> ();
//外側のループは切り出し位置の開始を決定しています
for(int KIRIDASHI_START =0; KIRIDASHI_START<num;KIRIDASHI_START++){
//内側のループは切り出し位置の終了を決定しています
for(int KIRIDASHI_END =0; KIRIDASHI_END < num; KIRIDASHI_END++){
Point point = new Point();
//切り出し位置の先頭をリストに格納する
point.x = KIRIDASHI_START;
point.y = KIRIDASHI_END;
kridashi.add(point);
}
}
return kridashi;
}
}