2014-03-30 68 views
0

示例數據爪哇正則表達式:匹配具有星號在它

A  B C           
BHD              

第1頁QPH 1個P
P 2 * PH 2個P
p 3 * PH ZP ZP 3 P的第一行
第4頁QPH QPH QP 4 P
5 * H * H * 5
6 * H * H * 6
7 * H * H * 7
8 ZHZHZ 8
9 * H * H * 9
10 * H * H * 10
W11 * UH * UH * U 11W

我想在它與 「* H」 提取第一行(例如第5行),但沒有得到任何結果 這是我迄今爲止

String result = sample Data 
Pattern l =Pattern.compile(^ ([A-Z}|//s)? ?([0-9]{1,2})  (\\*) [H] .*) 
Matcher m =l.matcher(result); 
If(m.find()){ 
System.out.println(「The Row number is: 「 m.group(2)); 
} 
+0

所以你想逐行讀取數據並返回'5 * H * H * 5'這行?該方法應該採用'String'並返回一個'String'? –

+0

我想返回行號(例如:「5」)。這是我的方法名稱/佈局:「公共字符串findRow(字符串數據)拋出異常{」 – user3306992

回答

0

從我的理解試圖要掃描的String行由行並查找包含* H第一線然後返回它的號碼。

這種模式是\\*\\s+H,你只需要找到包含該模式的行:

public static int findStartH(final String input) { 
    final Pattern pattern = Pattern.compile("\\*\\s+H"); 
    final Scanner scanner = new Scanner(input); 
    for (int i = 1; scanner.hasNextLine(); ++i) { 
     final String line = scanner.nextLine(); 
     if (pattern.matcher(line).find()) { 
      return i; 
     } 
    } 
    throw new IllegalArgumentException("Input does not contain required string."); 
} 

快速測試案例:

public static void main(final String[] args) throws Exception { 
    final String input = "Sample Data A B C\n" 
      + "BHD\n" 
      + "P 1 QPH 1 P\n" 
      + "P 2 *PH 2 P\n" 
      + "P 3 *PH ZP ZP 3 P\n" 
      + "P 4 QPH QPH QP 4 P\n" 
      + "5 * H * H * 5\n" 
      + "6 * H * H * 6\n" 
      + "7 * H * H * 7\n" 
      + "8 Z H Z H Z 8\n" 
      + "9 * H * H * 9\n" 
      + "10 * H * H * 10\n" 
      + "W11 *UH *UH *U 11W"; 
    System.out.println(findStarH(input)); 
} 

輸出:

7 
+0

謝謝。這非常有幫助,但我實際上想返回數據中列出的行號,例如:「5」而不是7. – user3306992

+0

@ user3306992它返回'7',因爲在這種情況下_is_是數據中的行 - 對它們進行計數。 –