2017-07-25 116 views
2

我想通过扫描程序拆分下面的多行字符串。我想分裂开始与线 “A |基于分隔符的拆分多行字符串

Input 
A|14|23|656 
B|15|ga|a 
A|11|424|6262 

输出

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 
+0

参见[这个答案](https://stackoverflow.com/a/45293555/2310289)有关如何使用多线拆分 –

+0

@ScaryWombat。谢谢。我试过这个解决方案String [] paragraph = abcd.split(“(?m)^ A \\ | $ \\ R?”);但这似乎并不奏效。 – Patan

+0

@帕坦我认为即使是第一线也没有得到考虑。你可以试试这个:'String abcd =“B | 15 | ga | a \ r \ nA | 14 | 23 | 656 \ r \ nA | 11 | 424 | 6262”'请检查输出。 –

回答

0

默认情况下,java中的正则表达式只匹配整个输入序列的开始和结束。

因此,您必须启用多线模式来分别考虑每条线。只需在标记(?m)之前加上正则表达式即可启用多线模式。

scan.useDelimiter("(?m)^A\\|"); 

见演示此:https://ideone.com/1HwXCU

0

请试试这个:

try (final Scanner scan = new Scanner(abcd)) { 
     scan.useDelimiter("(?:(^A\\|)|(\nA\\|))"); 
     while (scan.hasNext()) { 
      System.out.println("Group"); 
      System.out.println("A|" + scan.next()); 
     } 
    }