在文本文件中搜索子字符串 - java

时间:2015-08-10 20:02:32

标签: java file search substring

我正在完成一项繁琐的工作,但是我被困在了一个我认为相当简单的部分。我需要搜索名字'在文本文件中。名称前面用连字符表示,例如

"你好这是一个例子,如果我们使用-john,那么john就是我要寻找的名字"

我需要得到约翰'在这种情况下,将其存储到列表中。

我知道如何读取行,使用java的fileReader和readLine函数。但是我不知道如何在文本文件中查找字符,比如在连字符之后搜索连字符,然后在连字符后创建一个短子字符串下一个空格表示名称。有人可以帮助我使用伪代码或我不知道的功能可以使这更容易吗?如果我听起来很混乱,我道歉!

5 个答案:

答案 0 :(得分:2)

您可以在行上使用正则表达式来查找String中的名称。正则表达式用于查找和匹配给定String中的某些特征。

因此,对于您的示例,使用反斜杠,您将使用以下代码:

Pattern p = Pattern.compile("-.");
Matcher m = p.matcher("\\Tom");

if (m.find()) {
    System.out.println(m.group());
}

“ - 。”代表'\'后面的任何字符的模式。请注意,因为'\'是转义字符,所以它必须以另一个'\'开头。

如果你想让它只接受字母表中的字符,你可以使用“ - / ^ [A-z] + $ /”,它基本上只查找连字符,后面跟着字母表中的字符。

我建议你阅读正则表达式,以及它必须提供的不同表达方式。

Pattern class, Matcher class

此外,学习Regex的良好资源是Regexr.com,它允许您查找正则表达式引用,并在线尝试各种表达。

答案 1 :(得分:1)

String line;
List<String> list = new ArrayList();
BufferedReader bufferedReader = new BufferedReader(new FileReader(fileToSearch));
while((line = bufferedReader.readLine()) != null) {
  arr[] = line.split(" ");
  for (int i = 0; i < arr.length; i++) {
      if(arr[i].contains("\\"))
      list.add(arr[i].substring(arr[i].indexOf("\\") + 1);
  }
return list;

答案 2 :(得分:0)

我建议使用模式和匹配器来解决问题。

public class Example {
    public static void main(String[] args) {
        String test = "Hello this is an example, if we were to use -john, then john would be the name I would be looking for.  Another example would be -ebenezer which should return ebenezer";

        Pattern pattern = Pattern.compile("-(\\w+)");
        Matcher matcher = pattern.matcher(test);

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

这导致:

-john
-ebenezer

请注意,这不会捕获任何包含在下一行的匹配项。

答案 3 :(得分:0)

有很多方法可以解决这个问题。如果您理解正则表达式,最简单的可能就是使用Java的PatternMatcher

List<String> lines = Files.readAllLines(Paths.get("names.txt")); //use path to your file
final List<String> names = new ArrayList<>();
for (String line : lines) {
    Pattern pattern = Pattern.compile("\\s(-\\w+)\\s*");
    Matcher matcher = pattern.matcher(line);
    while (matcher.find()) {
        String name = matcher.group(1);
        //optionally, remove the -
        name = name.substring(1);
        names.add(name);
    }
}

System.out.println(Arrays.toString(names.toArray()));

答案 4 :(得分:0)

另一种解决方案

try (BufferedReader reader = new BufferedReader(new FileReader(new File("test.txt")))) {
    int c;
    StringBuilder nameBuilder = new StringBuilder();
    boolean inName = false;
    while ((c = reader.read()) != -1) {
        if (inName) nameBuilder.append((char)c);
        if ((char) c == '-') inName = true;
        else if (inName && (char) c == ' ') {
            inName = false;
            System.out.println(nameBuilder);
            nameBuilder.delete(0, nameBuilder.length());
        }
    }
} catch (IOException e) {
    e.printStackTrace();
}