打印一个字符串,其中包含一个特定的模式在Java
我想在一个.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类,但只找到了匹配表达式的方法,但没有得到整个线条。
我的其他经历可能以某种方式计算包含该模式的行,然后返回并打印与计数对应的行。
这东西grep
是专为,但如果你想这样做在Java中,那么你可以使用这个while
循环体而不是:
while(myScan.hasNext()){
String line = myScan.nextLine();
if (myPat.matcher(line).find()) {
System.out.println(line);
}
}
正如其他人所说,你的原代码的问题是,它实际上并没有提前Scanner
。
现在这一切都变得更有意义。感谢所有的帮助。 – jjpotter 2010-03-21 13:10:41
在你只要求扫描仪,如果有另一个入口的那一刻,和没有真正得到它(通过next()
)
首先猜测,为什么你永远循环是扫描仪类有两种方法:hasNext
和next
。
hasNext
将测试是否有另一个令牌匹配,而不移动文件中的Scanner
的位置。
next
将返回下一个标记,并在出于某种原因不起作用时抛出异常。
所以通常情况下,你会看到使用像这样两个:
String token = "";
if(myScan.hasNext(wtv)) {
token = myScan.next(wtv);
}
我知道它的语义,但不会_match_模式,不_contain_它? – 2010-03-20 14:58:01