在字符串中搜索键值对

pow*_*366 -1 java

我有一个包含此内容的Java字符串:

Response: Success
Message: Extension Status
Exten: 1234
Context: from-sip
Hint: DS/5678
Status: 9
Run Code Online (Sandbox Code Playgroud)

我想搜索这个字符串键"Exten:""Status:",并获取相应的值,即"1234""9".这样做的最佳方法是什么?

acd*_*ior 6

您可以使用正则表达式来获取它们(Pattern类,MULTILINE标志flor简单):

import java.util.regex.*;
public class RegexStrings {
    public static void main(String[] args) {
        String input = "Response: Success\n"+
                        "Message: Extension Status\n"+
                        "Exten: 1234\n"+
                        "Context: from-sip\n"+
                        "Hint: DS/5678\n"+
                        "Status: 9";
        String exten = null;
        String status = null;

        Matcher m = Pattern.compile("^Exten: (.+?)$", Pattern.MULTILINE).matcher(input);
        if (m.find()) {
            exten = m.group(1);
        }
        Matcher m2 = Pattern.compile("^Status: (.+?)$", Pattern.MULTILINE).matcher(input);
        if (m2.find()) {
            status = m2.group(1);
        }
        System.out.println("Exten: "+exten);
        System.out.println("Status: "+status);
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

Exten: 1234
Status: 9
Run Code Online (Sandbox Code Playgroud)

这里在线演示.


如果您的字符串具有固定格式,您可以使用组合String#substring(),这可能更容易掌握:

public static void main(String[] args) {
    String input = "Response: Success\n"+
                    "Message: Extension Status\n"+
                    "Exten: 1234\n"+
                    "Context: from-sip\n"+
                    "Hint: DS/5678\n"+
                    "Status: 9";

    String exten = input.substring(input.indexOf("Exten: ")+"Exten: ".length(), input.indexOf("Context: ")).trim();
    String status = input.substring(input.indexOf("Status: ")+"Status: ".length(),input.length()).trim();

    System.out.println("Exten: "+exten);
    System.out.println("Status: "+status);
}
Run Code Online (Sandbox Code Playgroud)

(输出相同)

这里有子串示例的在线演示.