0

我正在尝试将字符串分解为由文本行组成的数组列表。每 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,并且在部分中打印每个项目会返回:

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。

4

2 回答 2

3

您可以使用以下正则表达式进行拆分:

String[] arr = str.split("(?<=\\G.{90})|[\r\n]|\r\n");
  • (?<=\\G.{90})从前一个匹配开始,拆分前面有 90 个字符的空字符串。\\Ganchor 导致正则表达式从前一个匹配结束的地方开始匹配。因此,它首先匹配90开头的字符,然后匹配下一个90字符,依此类推。
  • [\r\n]\r在或上分裂\n
  • \r\nsplits on \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]

参考:

于 2013-10-16T18:13:58.750 回答
0

我会调用string.split("\r")在换行符上创建一个字符串拆分数组。然后遍历每一个,如果长度超过 90 个字符,则在该点拆分它。

于 2013-10-16T18:13:47.680 回答