普通にsubstringを使った場合。これだとサロゲートペアに対応していないので、文字列に「𠮷」などが含まれる場合は文字数が少なくなったり文字化けするなどの不具合が発生する。
public static List<String> splitByLength(String s, int length) {
List<String> list = new ArrayList<>();
while (s != null && s.length() != 0) {
int endIndex = Math.min(length, s.length());
list.add(s.substring(0, endIndex));
s = s.substring(endIndex);
}
return list;
}
正規表現を使って分割する方法。こちらはサロゲートペア対応。
情報提供:macoshita
public static List<String> splitByLength(String s, int length) {
List<String> list = new ArrayList<>();
if (!Strings.isNullOrEmpty(s)) {
Matcher m = Pattern.compile("[\\s\\S]{1," + length + "}").matcher(s);
while (m.find()) {
list.add(m.group());
}
}
return list;
}