每次遇到一个字符时,在数组列表中拆分一个字符串

时间:2013-10-16 18:09:33

标签: java regex arrays string

我正在尝试将字符串分解为由文本行组成的数组列表。每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。

2 个答案:

答案 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个字符,则在该点进行拆分。