2017-07-25 113 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()); 
     } 
    }