Java 基于分隔符拆分多行字符串
我正在尝试通过扫描仪拆分下面的多行字符串。我想拆分以“A |开头的行” 输出Java 基于分隔符拆分多行字符串,java,java.util.scanner,Java,Java.util.scanner,我正在尝试通过扫描仪拆分下面的多行字符串。我想拆分以“A |开头的行” 输出 Group A|14|23|656 B|15|ga|a Group A|11|424|6262 我试过如下的扫描仪 public static void main(String[] args) { String abcd = "A|14|23|656\r\nB|15|ga|a\r\nA|11|424|6262"; try (final Scanner sca
Group
A|14|23|656
B|15|ga|a
Group
A|11|424|6262
我试过如下的扫描仪
public static void main(String[] args) {
String abcd = "A|14|23|656\r\nB|15|ga|a\r\nA|11|424|6262";
try (final Scanner scan = new Scanner(abcd)) {
scan.useDelimiter("^A\\|");
while (scan.hasNext()) {
System.out.println("Group");
System.out.println("A|" + scan.next());
}
}
}
实际:它只是考虑第一行上的匹配A |,而不是其他行上的匹配
Group
A|14|23|656
B|15|ga|a
A|11|424|6262
默认情况下,java中的正则表达式仅在整个输入序列的开头和结尾匹配
这样,必须启用多行模式来分别考虑每条线。只需在正则表达式前面加上标记
(?m)
,即可启用多行模式
scan.useDelimiter("(?m)^A\\|");
请参见此处的演示:请尝试以下操作:
try (final Scanner scan = new Scanner(abcd)) {
scan.useDelimiter("(?:(^A\\|)|(\nA\\|))");
while (scan.hasNext()) {
System.out.println("Group");
System.out.println("A|" + scan.next());
}
}
有关如何使用多行的信息,请参见split@ScaryWombat. 谢谢我尝试了那个解决方案字符串[]段落=abcd.split((?m)^A\\\\\\$\\R?);但这似乎不起作用。@Patan我认为即使是第一行也没有得到考虑。您可以试试这个:
String abcd=“B | 15 | ga | a\r\nA | 14 | 23 | 656\r\nA | 11 | 424 | 6262”
,请检查输出。@Ashraf.Shk786。谢谢你的注意。是的,它也打印第一行。我怎样才能避免that@Patanscan.useDelimiter((?m)^A\\ |)
应该可以工作,但如果不工作,我建议您尝试这样做:步骤1。
使用新行拆分/分离字符串,并将其存储为数组步骤2。
然后尝试打印数组中的数据并对A
进行模式匹配,并继续打印数据,直到图案匹配后匹配打印新行或执行任何需要的操作,并反复重复步骤2
,直到从阵列中打印出最后一个元素。
try (final Scanner scan = new Scanner(abcd)) {
scan.useDelimiter("(?:(^A\\|)|(\nA\\|))");
while (scan.hasNext()) {
System.out.println("Group");
System.out.println("A|" + scan.next());
}
}