我有一个小的java程序,它搜索文件夹中所有* .txt文件的内容以查找特定的字符串。
我的问题示例:
问题:
它正在搜索6570但是我使用该字符串拾取这样的值的结果:
11111116570111111 657011111 111116570 6570
问题:我想只搜索一个确切的字符串,例如:“6570”。如何让它返回仅 6570的确切值?我不希望在开头或结尾有任何额外的字符,只需要确切的值。
这是我的代码:
import java.io.*;
import java.util.*;
public class FileScanner {
public static void main(String args[]) {
System.out.print("Enter string to find: ");
Scanner sc = new Scanner(System.in);
find(sc.nextLine());
}
public static void find(String delim) {
File dir = new File("files");
if (dir.exists()) {
String read;
try {
File files[] = dir.listFiles();
for (int i = 0; i < files.length; i++) {
File loaded = files[i];
if (loaded.getName().endsWith(".txt")) {
BufferedReader in = new BufferedReader(new FileReader(
loaded));
StringBuffer load = new StringBuffer();
while ((read = in.readLine()) != null) {
load.append(read + "\n");
}
String delimiter[] = new String(load).split(delim);
if (delimiter.length > 1) {
System.out.println("Found "
+ (delimiter.length - 1) + " time(s) in "
+ loaded.getName() + "!");
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
} else {
System.out.println("error: dir wasn't found!");
}
}
}
谢谢你们,我真的希望你能帮我解决我的编程问题。我一直试图解决它已经有一个月了,现在我正在寻求帮助。
答案 0 :(得分:1)
您最好的选择是阅读Mastering Regular Expressions。与此同时,也许tutorial on word boundaries会给你正确的想法。
答案 1 :(得分:1)
一个非常简单的解决方案是在您要搜索的字符串的每一侧添加空格。
答案 2 :(得分:1)
您不希望将搜索字词视为分隔符。如果我已正确理解您的问题,您想要匹配完全字词吗? “word”是指以空格分隔的字符串。没有进入正则表达式,你可以做的最简单的事情是:
int matchCount = 0;
while((read = in.readLine()) != null) {
String[] words = read.split("\\s+"); // split the line on white space
for (String word : words) { // loop thru the resulting word array
if (word.matches(searchTerm)) matchCount++; // if exact match increment count
}
}
如果您的搜索字词为“7683”,则会匹配单词“7683”而不是“67683”或“7683h” - 这是完全匹配。
答案 3 :(得分:0)
而不是:
String delimiter[] = new String(load).split(delim);
if(delimiter.length > 1) {
System.out.println("Found " + (delimiter.length - 1) + " time(s) in " + loaded.getName() + "!");
}
你可以使用它,我想你会得到你想要的东西:
String delimiter[] = new String(load).split(" ");
int counter = 0;
for(int i = 0; i < delimeter.length; i++){
if(delimeter[i].equals(delim)) counter++;
}
System.out.println("Found " + counter + " time(s) in " + loaded.getName() + "!");
答案 4 :(得分:0)
这样的事情会起作用吗?
public static void find(String delim) {
File dir = new File("/tmp/files");
Pattern strPattern = Pattern.compile(delim);
if (dir.exists()) {
try {
for(File curFile : dir.listFiles()){
if(!curFile.getName().endsWith(".txt")){continue;}
BufferedReader in = new BufferedReader(new FileReader(
curFile));
int foundCount = 0;
String read = null;
while ((read = in.readLine()) != null) {
if(strPattern.matcher(read).matches()){
foundCount ++;
}
}
System.out.println("Found "+ delim +" "+ foundCount + " time(s) in "+curFile);
}
} catch (Exception e) {
e.printStackTrace();
}
} else {
System.out.println("error: dir wasn't found!");
}
}