如何将文件传递到 Java Matcher?
How to pass a file into Java Matcher?
我有这个使用 Java Matcher
的简单方法
public int countWord(String word, File file) throws FileNotFoundException {
String patternString = word;
Pattern pattern = Pattern.compile(patternString);
Matcher matcher = pattern.matcher(file);
int count = 0;
while (matcher.find()) {
count++;
System.out.println("found: " + count + " : "
+ matcher.start() + " - " + matcher.end());
}
return count;
}
我的想法是传一个文件到指令中:
Matcher matcher = pattern.matcher(file);
但是 Java
抱怨它,即使我听从 IDE 的建议说要像这样进行转换:
java.util.regex.Matcher matcher = pattern.matcher((CharSequence) file);
事实上,当我尝试启动编译时,它会报告此消息:
Exception in thread "main" java.lang.ClassCastException: java.io.File cannot be cast to java.lang.CharSequence
我怎样才能越过这个障碍?
当然不能将File转为CharSequence,它们之间没有任何关系。
Pattern class 中的方法 matcher
接受一个 CharSequence 参数,因此您需要将一个 CharSequence(很可能是一个 String)传递给它。
您需要读取文件的内容。有很多方法,这完全取决于您是否知道文件是大还是小。如果它很小,那么您可以读取所有行,将它们收集到一个字符串中并将其传递给 matcher
方法。如果它很大,那么你不能一次全部读取它(你会消耗大量内存)所以你需要分块读取它。
考虑到您需要浏览内容并找到特定模式,这可能很困难 - 假设您的模式比单个块长。因此,如果您的文件真的很大,我建议多考虑一下正确的方法。
检查这个以读取文件内容:How do I create a Java string from the contents of a file?
我把方法改成这样:
public void countWord(String word, File file) throws FileNotFoundException {
int count = 0;
Scanner scanner = new Scanner(file);
while (scanner.hasNextLine()) {
String nextToken = scanner.next();
Pattern pattern = Pattern.compile(word);
java.util.regex.Matcher matcher = pattern.matcher(nextToken);
while (matcher.find()) {
count++;
System.out.println("found: " + count + " : "
+ matcher.start() + " - " + matcher.end());
}
}
谢谢
我有这个使用 Java Matcher
的简单方法public int countWord(String word, File file) throws FileNotFoundException {
String patternString = word;
Pattern pattern = Pattern.compile(patternString);
Matcher matcher = pattern.matcher(file);
int count = 0;
while (matcher.find()) {
count++;
System.out.println("found: " + count + " : "
+ matcher.start() + " - " + matcher.end());
}
return count;
}
我的想法是传一个文件到指令中:
Matcher matcher = pattern.matcher(file);
但是 Java
抱怨它,即使我听从 IDE 的建议说要像这样进行转换:
java.util.regex.Matcher matcher = pattern.matcher((CharSequence) file);
事实上,当我尝试启动编译时,它会报告此消息:
Exception in thread "main" java.lang.ClassCastException: java.io.File cannot be cast to java.lang.CharSequence
我怎样才能越过这个障碍?
当然不能将File转为CharSequence,它们之间没有任何关系。
Pattern class 中的方法 matcher
接受一个 CharSequence 参数,因此您需要将一个 CharSequence(很可能是一个 String)传递给它。
您需要读取文件的内容。有很多方法,这完全取决于您是否知道文件是大还是小。如果它很小,那么您可以读取所有行,将它们收集到一个字符串中并将其传递给 matcher
方法。如果它很大,那么你不能一次全部读取它(你会消耗大量内存)所以你需要分块读取它。
考虑到您需要浏览内容并找到特定模式,这可能很困难 - 假设您的模式比单个块长。因此,如果您的文件真的很大,我建议多考虑一下正确的方法。
检查这个以读取文件内容:How do I create a Java string from the contents of a file?
我把方法改成这样:
public void countWord(String word, File file) throws FileNotFoundException {
int count = 0;
Scanner scanner = new Scanner(file);
while (scanner.hasNextLine()) {
String nextToken = scanner.next();
Pattern pattern = Pattern.compile(word);
java.util.regex.Matcher matcher = pattern.matcher(nextToken);
while (matcher.find()) {
count++;
System.out.println("found: " + count + " : "
+ matcher.start() + " - " + matcher.end());
}
}
谢谢