繁体   English   中英

从字符串中提取字段值

[英]extracting field values from a string

我有一个多行字符串,如下所示:

Welcome to blah blah blah.  Below is the information you requested:
temperature: 12c
windspeed: 30 knotts
humidity: 29%
I hope you have a nice day

好的,这是简化版本。 无论如何,我想获取一个字段的值(例如风速)。 这是一个带有换行符的字符串(顺便说一句,有时字符串只是用\\ n分隔,有时又用\\ r \\ n分隔,我不确定是哪一个,但这是一旁的)。

反正有人写这个方法

private String getField(String pdfContent, String field) {
    String temp;
    String value = null;
    int idx = pdfContent.indexOf(field);
    if (idx != -1) {
        temp = pdfContent.substring(idx);
        String line = temp.split(":")[1];
        value = line.split("\n")[0].trim();
        l.info(field + value);
    }
    return value;
}

如果要查找name的值,则可以在下面的实例中说出来,这很好:

You requested name, age and telephone number.  Below are the results
name: Jenny
age: 22
telephone: 867-5309

该方法将找到name的第一个实例。 我想我可以在田野后找一个冒号,但是那之后可能会有一个冒号。

Following is your request for telephone and name:
telephone: 867-5309
name: Jenny

在正常的正则表达式中,我会寻找“ ^ name:”,但我认为在这种情况下不起作用。 有没有办法在一行的开头(在一个String中)查找字段? 最好也去寻找结肠

 name: Merrill Lynch Pierce Fenner Smith
 name_common: Merrill Lynch

只是找名字会先找到美林·皮尔斯·芬纳·史密斯

哦,是的,这是Java

由于您有多行字符串,因此我建议您使用Scanner类findinLine()方法,该方法将读取字符串的各部分,如下所示:

scannerobj.findInLine("temperature:");  O/p: 12c
scannerobj.findInLine("windspeed:");    O/p: 30 knotts
scannerobj.findInLine("humidity:");     O/p: 29%

您可以使用:/ /^name:\\s(.*)$/gm : /^name:\\s(.*)$/gm

使用^您可以确保该行以该字段开头。

:\\s确保该字段后面有分号和空格。

(.*)$将读取该行的其余部分并将其放入一个组中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM