在java中从字符串中提取值

xpcnnkqh  于 2021-07-03  发布在  Java
关注(0)|答案(3)|浏览(366)

我有一个字符串,我想从这个字符串中提取文本。我使用了 indexOf() 方法获取开始索引,但如何设置结束索引值?wen ben文本值是动态的,因此不能像这样硬编码 startIndex()+5 . 我需要一些逻辑代码。

String str = "Hi Welcome to stackoverflow : " +"\n"+"Information :"+"\n"+"hostname : abcd"+"\n"+
"questiontype : text"+"value : desc.";

if(str.contains("hostname : "))
{
String value = "hostname : "
int startIndex = str.indexof("hostname : ") + value.length();
// how to find the endIndex() in that case
}
htzpubme

htzpubme1#

也许没有indexof的答案那么有效,正则表达式的解决方案是简洁的。

Optional<String> getValue(String properties, String keyName) {
    Pattern pattern = Pattern.compile("(^|\\R)" + keyName + "\\s*:\\s*(.*)(\\R|$)");
    Matcher m = pattern.matcher(properties);
    return m.find() ? Optional.of(m.group(2)) : Optional.emtpy();
}

String hostname = getValue("...\nhostname : abc\n...", 
                           "hostname").orElse("localhost");
wvyml7n5

wvyml7n52#

String answer = str.substring( str.indexOf( value) + value.length(), str.indexOf( "questiontype :" ) );
eanckbw9

eanckbw93#

如果你想在 "hostname : " 你可以做:

String str = "Hi Welcome to stackoverflow : " +"\n"+"Information :"+"\n"+"hostname : abcde"+"\n"+
        "questiontype : text"+"value : desc.";

int startIndex = str.indexOf("hostname") + "hostname : ".length();
int endIndex = str.indexOf("questiontype") - 1;

String result = str.substring(startIndex, endIndex);

System.out.println(result);

另外请注意,您可以添加 \n 添加到字符串的文本,而不需要附加它,以便: "Hi Welcome to stackoverflow : " +"\n"+"Information..." 也可以很好地工作: "Hi Welcome to stackoverflow : \nInformation..."

相关问题