我有一个冗长的字符串,并希望将其分解为多个子字符串,因此我可以在菜单中将其显示为段落而不是单个长行。但是我不想在一个单词的中间分解它(所以每个n个角色都能完成工作)。
所以我希望在某个点之后第一次出现字符串中的任何字符时打破字符串(在我的例子中,字符将是一个空格和一个分号,但它们可以是任何东西)
类似的东西:
String result[] = breakString(baseString, // String
lineLength, // int
breakChars) // String
答案 0 :(得分:0)
首先考虑使用break chars进行拆分,然后将该拆分产生的段的长度相加,直到达到行长。
答案 1 :(得分:0)
这是一种方法。我在“某个点之后第一次出现字符串中的任何字符”时表示在某个breakChars
之后的lineLength
的下一个实例应该是一行的结尾。因此,breakString("aaabc", 2, "b")
会返回{"aaab", "c"}
。
static String[] breakString(String baseString, int lineLength, String breakChars) {
// find `lineLength` or more characters of the String, until the `breakChars` string
Pattern p = Pattern.compile(".{" + lineLength + ",}?" + Pattern.quote(breakChars));
Matcher m = p.matcher(baseString);
List<String> list = new LinkedList<>();
int index = 0;
while (m.find(index)) {
String s = m.group();
list.add(s);
// find another match starting at the end of the last one
index = m.end();
}
if (index < baseString.length() - 1) {
list.add(baseString.substring(index));
}
return list.toArray(new String[list.size()]);
}