2012-11-30 31 views
1

我有以下字符串的例子:如何在我的Java程序中使用RegExp?

00001 1 12 123 
00002 3 7 321 
00003 99 23 332 
00004 192 50 912 

在一個單獨的文本文件。 數字由製表符分隔而不是空格。

我試圖讀取文件並打印每一行,如果它匹配給定的RegExp,但我找不到適合這些行的RegExp。

private static void readFile() { 
    String  fileName = "processes.lst"; 
    FileReader file = null; 
    String  result = ""; 


    try { 
     file = new FileReader(fileName); 
     BufferedReader reader = new BufferedReader(file); 

     String line = null; 
     String regEx = "[0-9]\t[0-9]\t[0-9]\t[0-9]"; 
     while((line = reader.readLine()) != null) { 
      if(line.matches(regEx)) { 
       result += "\n" + line; 
      } 
     } 
    } catch(Exception e) { 
     System.out.println(e.getMessage()); 
    } finally { 
     if(file != null) 
      try { 
       file.close(); 
      } catch(Exception e) { 
       System.out.println(e.getMessage()); 
      } 
    } 

    System.out.println(result); 
} 

我結束了,沒有打印任何字符串!

+0

嗨,歡迎來到程序員SE,白板任務問答網站離子,而不是實際的編程問題。請參閱[常見問題]以瞭解本網站的概況。 – jmort253

回答

5

問題是[0-9]恰好匹配一個數字,但是您的輸入通常在TAB字符之間有多個數字。您需要使用[0-9]+來匹配每個號碼。 (+意味着以前的一個或多個重複...)

但更簡單的解決方案是使用String.split(...) ...閱讀javadoc。

+0

如果某些數字在( - )前面顯示,我該如何包含這些數字? – malhobayyeb

+1

然後,您需要更改正則表達式以匹配正面的可選減號。 (廢話!)。但我不會告訴你如何。閱讀正則表達式教程...或者按照我答案最後一句的建議!提示:SO是**不是**請求其他人爲您編程的地方。 –

0

使用本 String regEx = "[0-9]+\s[0-9]+\s[0-9]+\s[0-9]+";

  • 最低1個字符以上&
  • 最小0字符&上述

{2,3} 2字符&最大3字符的最小