Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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_Regex - Fatal编程技术网

Java 从字符串中提取字段值

Java 从字符串中提取字段值,java,regex,Java,Regex,我有一个多行字符串,类似这样: 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分隔,我不确定是哪个,但这是旁白

我有一个多行字符串,类似这样:

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
在普通的regexp中,我会查找“^name:”,但我认为这在本例中不起作用。有没有办法找到一行开头的字段(在一个字符串中)?最好也找一下冒号,就像你能找到的那样

 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

使用
^
确保行以字段开头

:\s
确保字段后面有一个分号和一个空格


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

在这种情况下为什么不起作用?你试过了吗?如果是,代码和问题在哪里?为什么不在换行符上拆分?然后您将获得字符串[](fieldName:fieldValue),然后您可以在“:”上再次拆分以获取值Show about String.startsWith()方法?您是对的,
String.indexOf(String)
无法识别或使用正则表达式。那么,为什么不使用真正的Java正则表达式呢?我对正则表达式的运气不太好。有时它是有效的。有时候不是。我仍然不确定在这种情况下是否可以使用“^”,或者这只是entrie字符串的开头?我以前尝试过使用“^”,但它似乎只适用于字符串的开头,而不是每行的开头。至少在我看来是这样的。我可以再试一次。您使用多行标志了吗?(末尾的/m)现在要查找文档;-)是的,请看一下OracleDocsforJava,他们将非常有效地向您解释该方法。