在分隔文本文件中搜索字符串

时间:2012-01-11 14:43:18

标签: java file input delimited-text

假设我有一个字符串=“你好”。如何打开文本文件并检查该文本文件中是否存在hello?

文本文件的内容:

hello:man:yeah

我尝试使用下面的代码。文件阅读器只读取第一行吗?我需要它来检查所有行以查看hello是否存在,然后如果确实存在,则从中取出“man”。

try {
    BufferedReader in = new BufferedReader(new FileReader("hello.txt"));
    String str;
    while ((str = in.readLine()) != null) {
        System.out.println(str);
    }
} catch (IOException e) {
    System.out.println("Error.");
}

3 个答案:

答案 0 :(得分:4)

如果你好:man:是的,你的文件中有一行,那么你的代码工作正常。 readLine()将读取一行直到找到换行符(在这种情况下为一行)。

如果您只想查看它是否在文件中,那么您可以执行以下操作:

 String str;
 boolean found = false;
 while ((str = in.readLine()) != null) {
       if(str != null && !found){
         found = str.contains("hello") ? true : false;
       }
    }

如果您需要进行全字搜索,则需要使用正则表达式。用\ b围绕搜索文本将执行整个单词搜索。这是一个片段(注意,StringUtils来自Apache Commons Lang):

    List<String> tokens = new ArrayList<String>();
    tokens.add("hello");

    String patternString = "\\b(" + StringUtils.join(tokens, "|") + ")\\b";
    Pattern pattern = Pattern.compile(patternString);
    Matcher matcher = pattern.matcher(text);

    while (matcher.find()) {
        System.out.println(matcher.group(1));
    }

当然,如果你没有多个令牌,你可以这样做:

String patternString = "\\bhello\\b";

答案 1 :(得分:1)

在每一行上使用String.contains方法。每行都在while循环中处理。

答案 2 :(得分:1)

使用String.indexOf()String.contains()方法。