为了账号安全,请及时绑定邮箱和手机立即绑定

如何在java中的文件中找到一个字符串并在它旁边获取字符串?

如何在java中的文件中找到一个字符串并在它旁边获取字符串?

慕的地6264312 2021-12-01 19:59:24
假设我有一个这样的文件:Name: someone1 surnameAge: someNumber1Height: whoCares1Weight: someWeight1Name: someone2Age: someNumber2Height: whoCares2Weight: someWeight2Name: someone3Age: someNumber3Height: whoCares3Weight: someWeight3我想在ArrayList<String>.我只想为此使用Scanner类。我尝试使用如下代码从文件中获取“名称:”部分:while(scanner.hasNextLine()) {            //read line by line            String line = scanner.nextLine();            //code to search for a word in the file which                 if(line.indexOf("Name:")!=-1) {                    // will search line by line for this word ignoring numbers in addition                    // I find the word with this, what next?                // I want to get word next to Name: and not only from one but from all the instances of the word Name:                }                else                    System.out.println("does not");        }我想在“名称:”旁边得到一个词,不仅来自一个词,而且来自“名称:”这个词的所有实例。我怎样才能做到这一点?编辑:另外,如何在文件中分隔字符串,例如,如果我想将第一人称的姓名存储在文件中,如someone1一个 ArrayList 和surname另一个 ArrayList 中。我如何将它们分开,并将它们存储在新的 ArrayLists 中。
查看完整描述

2 回答

?
www说

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

你会做什么完全取决于你的实际数据。这里有很多边缘情况。也许有些行只有一个名字,或者有些行有中间名、首字母、后缀等。这只是为了给你一个大概的概念。


查看完整回答
反对 回复 2021-12-01
?
繁华开满天机

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


查看完整回答
反对 回复 2021-12-01
  • 2 回答
  • 0 关注
  • 151 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信