如何在Java中拆分多行字符串

问题描述 投票:0回答:2

我有以下数据文字:

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

我想将它们分成以下3个单元:

第一单元:

[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]");

然而,这没有做到这一点,分裂它的正确方法是什么?

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

java string split
2个回答
2
投票

使用正则表达式(?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)

1
投票

您可以使用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;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.