我目前有一个包含许多最受欢迎名字的大型文本文件。我让用户输入一个特定的名称,我正在尝试打印具有该名称的行。我的问题是,如果用户输入像Alex这样的名字,那么当我只想让Alex打印时,每个包含Alex的名字,如亚历山大,亚历克西斯,亚历克西亚都会被打印出来。我该怎么办" if(line.contains(name)){"解决这个问题。 该行包含信息,例如姓名,受欢迎程度排名以及具有该名称的人数
try {
line = reader.readLine();
while (line != null) {
if(line.contains(name)){
text += line;
line = reader.readLine();
}
line = reader.readLine();
}
}catch(Exception e){
System.out.println("Error");
}
System.out.println(text);
答案 0 :(得分:2)
您可以将{regex word boundary用于此任务:
final String regex = String.format("\\b%s\\b", name);
final Pattern pattern = Pattern.compile(regex);
final Matcher matcher = pattern.matcher(line);
matcher.find();
if( matcher.group(0).length() > 0 ) {
text += line;
line = reader.readLine();
}
答案 1 :(得分:2)
简写就是使用Java8 Streams:看看:
public class Test2 {
public static void main(String[] args) {
String fileName = "c://lines.txt";
String name = "nametosearch";
try (Stream<String> stream = Files.lines(Paths.get(fileName))) {
stream.filter(line -> line.contains(" " + name + " ")).forEach(System.out::println);
} catch (IOException e) {
e.printStackTrace();
}
}
}
答案 2 :(得分:1)
line.equals(name)
替换
line.contains(name)