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

标签 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;
    }

我如何修改它,以便它检查换行符(“\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/

相关文章:

java - 如何修复使用 DiffUtil 向 ListUpdateCallback 发送更新时得到的错误位置

java - Mockito Spy doReturn 调用原始方法

javascript - 简单算术表达式的正则表达式

arrays - 如果有多个条件则求和

c - 什么是 int cost[N] 在 vi​​sual basic 中

java - Android: Volley 请求不起作用

退出方法时 Java 数组丢失

c# - 在 C# 中用 Regex 替换两个或多个空格

r - 在第一个空格上分割字符字段,而不删除 r 中的字段

c++ - 涉及指针成员变量和多态性的很奇葩的问题