Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中查找文件中的字符串并在其旁边获取字符串?_Java_File_File Handling - Fatal编程技术网

如何在java中查找文件中的字符串并在其旁边获取字符串?

如何在java中查找文件中的字符串并在其旁边获取字符串?,java,file,file-handling,Java,File,File Handling,假设我有这样一个文件: Name: George Washington 姓名:某人 年龄:1岁左右 身高:谁在乎1 重量:一些重量1 姓名:某人2 年龄:2岁左右 身高:谁在乎 体重:体重2 姓名:某人 年龄:3岁左右 身高:谁在乎 重量:大约重量3 我想获取名称旁边的所有字符串:在ArrayList中 我只想为此使用Scanner类 我尝试的是使用如下代码从文件中获取名称:part: Name: George Washington whilescanner.hastline{ //逐行阅读

假设我有这样一个文件:

Name: George Washington
姓名:某人 年龄:1岁左右 身高:谁在乎1 重量:一些重量1 姓名:某人2 年龄:2岁左右 身高:谁在乎 体重:体重2 姓名:某人 年龄:3岁左右 身高:谁在乎 重量:大约重量3 我想获取名称旁边的所有字符串:在ArrayList中

我只想为此使用Scanner类

我尝试的是使用如下代码从文件中获取名称:part:

Name: George Washington
whilescanner.hastline{ //逐行阅读 字符串行=scanner.nextLine; //用于在文件中搜索单词的代码 ifline.indexOfName:!=-1{ //将逐行搜索此单词,同时忽略数字 //我找到了这个词,接下来呢? //我想在Name:旁边找到单词,不仅是从一个单词,而且是从单词Name的所有实例中: } 其他的 System.out.PrintLnNots; } 我想在Name:旁边获取word,不仅从Name:的一个实例,而且从Name:的所有实例中获取

我该怎么做

编辑:

另外,如何在文件中分隔字符串,例如,如果我想在一个ArrayList中将文件中第一个人的名字存储为someone1,在另一个ArrayList中将姓氏存储为someone1。如何将它们分开,并将它们存储在新的ArrayList中。

您可以尝试使用Stringmatches来识别感兴趣的行:

List<String> names = new ArrayList<>();

while (scanner.hasNextLine()) {
    String line = scanner.nextLine();
    if (line.matches("^Name:.*")) {
        names.add(line.replaceAll("^Name:\\s+", ""));
    }
}
因此,通过删除^Name:\\s+,我们应该只保留此页面左侧的名称信息

编辑:

例如,如果您的姓名内容实际上是名字和姓氏,那么每一行的外观如下所示:

Name: George Washington
在这种情况下,如果格式是固定的,我们可以尝试使用Stringsplit来隔离名字和姓氏:

String[] parts = line.split("\\s+");
String first = parts[1];
String last = parts[2];
// then store first and last in separate lists

你会做什么完全取决于你的实际数据。这里有很多边缘案例。可能有些行只有一个名称,或者有些行有中间名、首字母、后缀等。这只是给您一个大概的想法。

以下是从提供的文件中提取名称列表的功能方法:

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());
}

谢谢你的回答,你能告诉我names.addline.split\\s+[1]是如何将字符串添加到文件名称旁边的吗?@Manhar重新加载页面,因为我从那时起就更改了我的答案。是的,它适用于你碰巧在问题中显示的确切数据,但如果名称中有空格,它将失败。上面的版本使用起来更安全,除非你绝对确定没有名字会有空格。知道这个很酷,谢谢。最后一件事,你能告诉我“^”和“*是如何工作的吗?我知道正则表达式中的\\s+,但是你能告诉我这些字符串是如何添加到代码的功能中的吗?^的意思就是从这里开始,并且。*这之后的任何事情都是确定的。请不要在其他人给出答案后更改你的问题。如果您的更改会使这些答案无效,则尤其如此。如果您的要求已更改,则您至少应向我们展示新数据的外观。@TimBiegeleisen我没有更改问题,这只是对您的答案的补充。虽然这可能会给出有效的结果,考虑到OP说:我只想使用扫描仪类来实现这一点。