2 回答
TA贡献1775条经验 获得超8个赞
您可以尝试使用String#matches来识别感兴趣的线:
List<String> names = new ArrayList<>();
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
if (line.matches("^Name:.*")) {
names.add(line.replaceAll("^Name:\\s+", ""));
}
}
这里的想法是获取所有以 开头的行Name:,然后删除Name:前缀,留下您想要的内容。
使用的正则表达式说明:
^ from start of string (line)
Name: match text 'Name:'
\\s+ followed by any number of spaces (or other whitespace)
因此,通过删除^Name:\\s+,我们应该只剩下它左侧的名称信息。
编辑:
例如,如果您的姓名内容实际上是名字和姓氏,那么每一行将如下所示:
Name: George Washington
在这种情况下,如果格式固定,我们可以尝试使用String#split隔离名和姓:
String[] parts = line.split("\\s+");
String first = parts[1];
String last = parts[2];
// then store first and last in separate lists
你会做什么完全取决于你的实际数据。这里有很多边缘情况。也许有些行只有一个名字,或者有些行有中间名、首字母、后缀等。这只是为了给你一个大概的概念。
TA贡献1816条经验 获得超4个赞
以下是从提供的文件中提取名称列表的功能方法:
public List<String> getNames(File file) throws IOException { return Files.lines(file.toPath()) .filter(str -> str.contains("Name: ")) .map(str -> str.split("Name: ")[1]) .collect(Collectors.toList());}
添加回答
举报