2010-03-20 95 views
2

我想在一個.csv文件的行中找到正則表達式,所以我最終可以保存所有匹配到另一個文件,並失去所有其他垃圾。打印一個字符串,其中包含一個特定的模式在Java

所以在我的文件中的行可能看起來像: 計算機名,用戶,IP,VariableData,位置

的VariableData是我想匹配的東西,如果有一個匹配,打印線。我爲此使用了一種模式,因爲我只想要VariableData的10個變體中的3個,而在這3個變體中,它們的編號不同(例如,「pc104,pccrt102,pccart65」)。

我正在嘗試使用掃描器類來做到這一點,並儘可能保持簡單,以便我能理解它。這是我帶着這個去的地方...(模式不完整,只是讓它像這樣進行測試)。

import java.io.File; 
import java.util.Scanner; 
import java.util.regex.Pattern; 


public class pcv { 

public static void main(String[] args) { 

    File myFile = new File("c:\\temp\\report.csv"); 

    Pattern myPat = Pattern.compile("pc"); 

    try{ 
    Scanner myScan = new Scanner(myFile); 

    while(myScan.hasNext()){ 

     if(myScan.hasNext(myPat)){ 
      System.out.println("Test"); 
     } 

    } 

    }catch(Exception e){ 

    } 


} 

} 

此代碼循環,即時猜測()方法被複位本身.hasNext。我已經玩了一下Matcher類,但只找到了匹配表達式的方法,但沒有得到整個線條。

我的其他經歷可能以某種方式計算包含該模式的行,然後返回並打印與計數對應的行。

+0

我知道它的語義,但不會_match_模式,不_contain_它? – 2010-03-20 14:58:01

回答

2

這東西grep是專爲,但如果你想這樣做在Java中,那麼你可以使用這個while循環體而不是:

while(myScan.hasNext()){ 
    String line = myScan.nextLine(); 
    if (myPat.matcher(line).find()) { 
     System.out.println(line); 
    } 
} 

正如其他人所說,你的原代碼的問題是,它實際上並沒有提前Scanner

+0

現在這一切都變得更有意義。感謝所有的幫助。 – jjpotter 2010-03-21 13:10:41

1

在你只要求掃描儀,如果有另一個入口的那一刻,和沒有真正得到它(通過next()

1

首先猜測,爲什麼你永遠循環是掃描儀類有兩種方法:hasNextnext

hasNext將測試是否有另一個令牌匹配,而不移動文件中的Scanner的位置。

next將返回下一個標記,並在出於某種原因不起作用時拋出異常。

所以通常情況下,你會看到使用像這樣兩個:

String token = ""; 
if(myScan.hasNext(wtv)) { 
    token = myScan.next(wtv); 
} 
相關問題