2014-01-25 23 views
0
Scanner sc = new Scanner(System.in); 
System.out.println("Enter file name"); 
String fileName = sc.next(); 
String line; 
Pattern p = Pattern.compile("\\d+"); 
Scanner s = new Scanner (new File(fileName)); 
while(s.hasNextLine()){ 
    line = s.next(); 
    Matcher m = p.matcher(line); 
    while(m.find()){ 
     System.out.println(m.group()); 
    } 
} 

的文件看起來像這樣只是數字

--------------- 
    aaaa bbb 
//another comment 
// a d 3 5 

2 4 6 
2 a 6 
10 10 

30 20 
nbnb 
------------ 

而且我希望它打印出的數字在每一行 例子:

2 4 6 
2 6 
10 10 
30 20 

它打印出每個號碼包括評論中的數字。它還在每行上打印一個數字。我希望它能夠像例子一樣打印,並跳過評論。

+0

你可以發佈你的文件的內容嗎? – PakkuDon

+0

我看到你改變你的代碼在正則表達式中有反斜槓。這有什麼區別嗎?在代碼輸入網站時是否有錯誤(您沒有複製粘貼?) – Floris

+0

@Floris不,我沒有複製和粘貼。我只是打錯了。它顯示數字,但不會忽略註釋 – user243872

回答

0

我懷疑你的意思是使用反斜槓:

Pattern p = pattern.compile("\\d+"); 

,因爲你寫的表達:

"//d+" 

查找兩個正斜槓後跟字母d的至少一個實例...

以下代碼似乎表現得如您所願:

public static void main (String[] args) throws java.lang.Exception 
{ 
String s[]={"some text 123 and 234 some 456 numbers", "just text", "123 234"}; 
Pattern p = Pattern.compile("\\d+"); 
for(String ss: s) { 
    Matcher m = p.matcher(ss); 
    int flag = 0; 
    while(m.find()){ 
     System.out.print(m.group() + " "); 
     flag = 1; 
     } 
    if(flag == 1) System.out.println(); 
    } 
} 

輸出:

123 234 456 
123 234 

注意 - 不要使用println()每個數字,因爲它會產生一個換行符。相反,我在while循環之前設置了一個標誌;如果我離開循環並設置了標誌,則意味着字符串中有數字,我需要一個換行符(System.out.println();)。否則,不需要換行符(因此僅文本行不會導致空白)。

我使用一個在線Java編譯器所以無法測試文件代碼的I/O部分 - 但我認爲這應該幫助你...

0

你可以做到這一切在同一行:

System.out.println(s.replaceAll("\\D+", " ").trim()); 

這取代的非數字字符的所有序列與空間(並從端部去掉空白)。