我正在尝试将字符串分解为由文本行组成的数组列表。每 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;
}
我如何修改它,以便它检查换行符(“\r”)并在每次检测到换行符时进行分割,并每 90 个字符进行分割?
__
更新:
使用下面提供的正则表达式解决方案,如下所示:
String[] parts = string.split("(?<=\\G.{" + partitionSize + "})|\r|\n");
我输入一个分成多行的字符串,例如:
1.
2.
3.
4.
5.
当我使用下面的正则表达式将其拆分为 array[] 部分时,parts.length 为 8,并且打印 parts 中的每个项目将返回以下内容:
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。
最佳答案
您可以使用以下正则表达式进行拆分:
String[] arr = str.split("(?<=\\G.{90})|[\r\n]|\r\n");
-
(?<=\\G.{90})
从上一个匹配开始,以 90 个字符开头的空字符串进行分割。\\G
anchor 使正则表达式从上一个匹配结束的位置开始匹配。所以首先它匹配90
字符开头,然后它匹配下一个90
人物等等。 -
[\r\n]
拆分为\r
或\n
. -
\r\n
split 于\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]
<小时/>
引用文献:
关于java - 每次遇到字符时,在数组列表中拆分字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19410669/