我正在完成一项繁琐的工作,但是我被困在了一个我认为相当简单的部分。我需要搜索名字'在文本文件中。名称前面用连字符表示,例如
"你好这是一个例子,如果我们使用-john,那么john就是我要寻找的名字"
我需要得到约翰'在这种情况下,将其存储到列表中。
我知道如何读取行,使用java的fileReader和readLine函数。但是我不知道如何在文本文件中查找字符,比如在连字符之后搜索连字符,然后在连字符后创建一个短子字符串下一个空格表示名称。有人可以帮助我使用伪代码或我不知道的功能可以使这更容易吗?如果我听起来很混乱,我道歉!
答案 0 :(得分:2)
您可以在行上使用正则表达式来查找String中的名称。正则表达式用于查找和匹配给定String中的某些特征。
因此,对于您的示例,使用反斜杠,您将使用以下代码:
Pattern p = Pattern.compile("-.");
Matcher m = p.matcher("\\Tom");
if (m.find()) {
System.out.println(m.group());
}
“ - 。”代表'\'后面的任何字符的模式。请注意,因为'\'是转义字符,所以它必须以另一个'\'开头。
如果你想让它只接受字母表中的字符,你可以使用“ - / ^ [A-z] + $ /”,它基本上只查找连字符,后面跟着字母表中的字符。
我建议你阅读正则表达式,以及它必须提供的不同表达方式。
此外,学习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的Pattern
和Matcher
。
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();
}