我正在尝试将字符串分解为由文本行组成的数组列表。每90个字符创建一行,或遇到换行符(\ r)。
我使用它来将字符串分成每90个字符的数组(代码中的partionSize):
private static List<String> getParts(String string, int partitionSize) {
List<String> parts = new ArrayList<String>();
int len = string.length();
for (int i=0; i<len; i+=partitionSize)
{
parts.add(string.substring(i, Math.min(len, i + partitionSize)));
}
return parts;
}
如何修改它以便检查换行符(&#34; \ r&#34;)并在每次检测到一个时拆分,并且每90个字符拆分一次?
__
更新:
使用下面提供的Regex解决方案,如下所示:
String[] parts = string.split("(?<=\\G.{" + partitionSize + "})|\r|\n");
我输入了一行分为多行的字符串,例如:
1.
2.
3.
4.
5.
当我使用下面的正则表达式将它拆分为array []部分时,parts.length为8,并且打印部分中的每个项目都会返回:
line 0 is 1.
line 1 is
line 2 is 2.
line 3 is
line 4 is 3.
line 5 is
line 6 is 4.
line 7 is
line 8 is 5.
对于这种情况,parts.length应为5。
答案 0 :(得分:3)
您可以使用以下正则表达式进行拆分:
String[] arr = str.split("(?<=\\G.{90})|[\r\n]|\r\n");
(?<=\\G.{90})
从前一个匹配开始,在前面有90个字符的空字符串上拆分。 \\G
锚点使正则表达式从上一个匹配结束的位置开始匹配。首先,它首先匹配90
个字符,然后匹配下一个90
个字符,依此类推。[\r\n]
分为\r
或\n
。\r\n
在\r\n
上拆分,这是Windows上的行分隔符。演示代码:
String str = "abcdefghi\njkl\rmnopasdf";
int maxCharacters = 5;
String[] arr = str.split("(?<=\\G.{" + maxCharacters + "})|[\r\n]|\r\n");
System.out.println(Arrays.toString(arr));
<强>输出:强>
[abcde, fghi, jkl, mnopa, sdf]
<强>参考文献:强>
答案 1 :(得分:0)
我会调用string.split("\r")
在换行符上创建一个字符串拆分数组。然后遍历每一个,如果长度超过90个字符,则在该点进行拆分。