Java 如何解析字符串并提取键值形式的数据?

Java 如何解析字符串并提取键值形式的数据?,java,jakarta-mail,Java,Jakarta Mail,我需要解析从电子邮件内容创建的字符串并提取数据。电子邮件的结构如下所示: Some email text.............. //these properties I have to extract Name: SomeName Surname: SomeSurname Email: SomeEmail Adress: some adress etc... Some email text................ 你知道一些技术,如何解析这个字符串和提取数据吗? 我找到了一些方法

我需要解析从电子邮件内容创建的字符串并提取数据。电子邮件的结构如下所示:

Some email text..............
//these properties I have to extract
Name: SomeName
Surname: SomeSurname
Email: SomeEmail
Adress: some adress
etc...
Some email text................
你知道一些技术,如何解析这个字符串和提取数据吗? 我找到了一些方法,但它是有缺陷的,因为它不工作时,值有空格,就像上面的地址

    String searchText = "Name:";
    int lastIndexOf = content.lastIndexOf(searchText);
    String substring = content.substring( 1 + lastIndexOf + searchText.length());
    String substring1 = substring.substring(0, substring.indexOf(" "));

以下是解决方案的代码:

    FileReader file;
    String sCurrentLine;
    String searchString = "Name";
    try {
        file = new FileReader("D:\\junk\\Sample.txt");

        BufferedReader br = new BufferedReader(file);

        br = new BufferedReader(new FileReader("D:\\junk\\Sample.txt"));

        while ((sCurrentLine = br.readLine()) != null) {

            String splitString = sCurrentLine.substring(0, sCurrentLine.indexOf(':'));
            splitString = splitString.replace(" ", "");
            if (splitString.equalsIgnoreCase(searchString)) {
                System.out.println(sCurrentLine.substring(sCurrentLine.indexOf(':')).replace(":",""));
                break;
            }

        }

    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
让我解释一下代码: 这里我们从一个文本文件中获取输入。文本文件包含
键值
映射 读取文件后,我们将其解析为
字符串
,在本例中为
sCurrentLine

然后,我们首先从
':'
中拆分字符串,然后删除所有空格,然后将拆分的字符串存储在
splitString
中,这将成为不带空格的out键

然后我们将
splitString
searchString
匹配。如果匹配,则打印字符串中位于
:'
后面的部分


希望有帮助

这看起来像yaml,可能使用java yaml解析器…,或简单的
content.split(“:”)
,如果结果不是nulljava.util,则修剪结果。属性可以是一种方式是的,逐行读取将是解决方案,但在我的情况下,我无法逐行读取,因为我从javax.mail.Message(作为内容)获取此字符串,所以这个字符串只有一行。在这种情况下,您需要将javax.mail.Message转换为字符串,然后按照上面提供的解决方法进行操作。在这种情况下,不需要while循环。只能使用while循环中的逻辑,其中sCurrentLine是转换javax.mail.Message提要后得到的字符串。请参考以下链接以获取灵感:如果字符串真的只有一行没有换行符,我不知道如何判断一个字段的结束位置和下一个字段的开始位置。但是,如果是一个包含多行的字符串,如上图所示,则可以使用(而不是FileReader)读取字符串中的行。这不是最有效的方法,但很简单。根据数据的确切格式,您可能可以使用类来读取数据。