代码之家  ›  专栏  ›  技术社区  ›  Frank

如何在Java中实现多行字符串的分割

  •  -1
  • Frank  · 技术社区  · 6 年前

    我有以下数据文本:

    [data]A[/data]
    aaa
    4 5 8 
    [data]B[/data]
    bbb
    3 1 9 
    [data]C[/data]
    ccc
    6 5 2
    ... 
    

    我想把它们分成以下三个单元:

    第一单元:

    [data]A[/data]
    aaa
    4 5 8 
    

    第二单元:

    [data]B[/data]
    bbb
    3 1 9 
    

    第三单元:

    [data]C[/data]
    ccc
    6 5 2
    

    所以我的代码如下:

    String Units[]=dataText.split("[data]");
    

    但是,这样做不合适,什么是正确的方法来分割它?

    如果我使用regex,应该如何编写表达式?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Andreas dfa    6 年前

    使用正则表达式 (?ms)(?<=.)(?=^\[) :

        String[] units = dataText.split("(?ms)(?<=.)(?=^\\[)");
    

    regex101.com 演示。

    说明:

    (?ms)       Turn on MULTILINE ('^' and '$' match after/before line terminator)
                    and DOTALL (aka "single line", '.' matches any character)
    (?<=.)      Must be preceded by a character (needs 's' flag)
                   Used to prevent matching very first '['
    (?=^\[)     Must be followed by a '[' at the beginning of a line (needs 'm' flag)
    
        2
  •  1
  •   Christian Huber    6 年前

    您可以使用BufferedReader:

    BufferedReader br = new BufferedReader(new StringReader(dataString));
    

    按如下方式迭代字符串:

    int lineCounter = 0;
    int arrayCounter = 0;
    String line = null;
    while( (line = br.readLine()) != null )
    {
        units[arrayCounter] += line;
        if (lineCounter >= 2) {
            arrayCounter++;
            lineCounter = 0;
        }
    }