搜索完全匹配是返回子字符串。

时间:2009-12-09 19:22:23

标签: java

我有一个小的java程序,它搜索文件夹中所有* .txt文件的内容以查找特定的字符串。

我的问题示例:

  1. 输入字符串以查找:
  2. 输入字符串以查找:6570
  3. 输入字符串以查找:6570
    在kyle.txt中找到2次!
    在kylezz.txt找到2次!
    按任意键继续 。 。

  4. 问题:

    它正在搜索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!");
            }
        }
    }
    

    谢谢你们,我真的希望你能帮我解决我的编程问题。我一直试图解决它已经有一个月了,现在我正在寻求帮助。

5 个答案:

答案 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!");
    }
}