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)读取字符串中的行。这不是最有效的方法,但很简单。根据数据的确切格式,您可能可以使用类来读取数据。