Java 在字符串中搜索键值对

Java 在字符串中搜索键值对,java,Java,我有一个包含以下内容的Java字符串: Response: Success Message: Extension Status Exten: 1234 Context: from-sip Hint: DS/5678 Status: 9 我想在这个字符串中搜索键“Exten:”和“Status:”,并检索相应的值,即“1234”和“9”。这样做的最佳方法是什么?您可以使用正则表达式获取它们(模式类,使用多行标志flor simplicity): 输出: Exten: 1234 Status: 9

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

Response: Success
Message: Extension Status
Exten: 1234
Context: from-sip
Hint: DS/5678
Status: 9

我想在这个字符串中搜索键
“Exten:”
“Status:”
,并检索相应的值,即
“1234”
“9”
。这样做的最佳方法是什么?

您可以使用正则表达式获取它们(
模式
类,使用
多行
标志flor simplicity):

输出:

Exten: 1234
Status: 9


如果字符串具有固定格式,则可以使用
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);
}
(输出相同)

.

您可以使用String.split()方法,只需最少使用正则表达式。以下是通用的代码,它将给定的输入转换为映射,以便于编程访问到键值对:

import java.util.Map;
import java.util.TreeMap;

public class NameValueCreator {

    public static void main(String[] args) {

        String input = "Response: Success\nMessage: Extension Status\nExten: 1234\nContext: from-sip\nHint: DS/5678\nStatus: 9";
        System.out.println(input);

        //Convert given input to Map
        Map<String, String> nameValuePairs = convertToMap(input);


        System.out.println("------------- converted map -----------------");
        System.out.println(nameValuePairs);

    }

    public static Map<String, String> convertToMap(String input) {
        Map<String, String> nameValuePairs = new TreeMap<String, String>();
        //Split by newline to split the input into lines, where each line represents one key value pair
        String[] nameValueStrings = input.split("\\n");
        for (String nameValueString : nameValueStrings) {
            //Split by colon followed by space
            String[] nameAndValue = nameValueString.split(": ");
            nameValuePairs.put(nameAndValue[0].trim(), nameAndValue[1].trim());
        }
        return nameValuePairs;
    }

}
不确定是否确实要搜索“:”作为键的一部分,如
Exten:
,如果是,则替换
nameValueString.split(“:”)带有
nameValueString.split(“”)

这将起作用

 public static void main(String args[]) {
    String read = "Response: Success\n" +
            "Message: Extension Status\n" +
            "Exten: 1234\n" +
            "Context: from-sip\n" +
            "Hint: DS/5678\n" +
            "Status: 9";
    String[] arr;
    arr = read.split("\n");
    for (String i : arr) {
        if (i.contains("Exten:") || i.contains("Status:")) {
            System.out.println(i.split(" ")[1]);
        }
    }
}

Java属性类为这样的名称-值对内置了解析器,这些名称-值对由新行终止。我们可以这样做:

属性p=Properties.load(新的ByteArrayInputStream(xxx…); P.getProperty(您的密钥)


这将使您的代码小而可读。

String a=“1234”String b=“9”
…如果这不适合您,您能更具体一点吗?您想从哪里获取值?它是文件吗?请指定。更新了我的问题。@Masud CSE CUET Input是一个Java字符串变量此代码是不可伸缩的,因为在输入中添加新键需要更改代码。
Response: Success
Message: Extension Status
Exten: 1234
Context: from-sip
Hint: DS/5678
Status: 9
------------- converted map -----------------
{Context=from-sip, Exten=1234, Hint=DS/5678, Message=Extension Status, Response=Success, Status=9}
 public static void main(String args[]) {
    String read = "Response: Success\n" +
            "Message: Extension Status\n" +
            "Exten: 1234\n" +
            "Context: from-sip\n" +
            "Hint: DS/5678\n" +
            "Status: 9";
    String[] arr;
    arr = read.split("\n");
    for (String i : arr) {
        if (i.contains("Exten:") || i.contains("Status:")) {
            System.out.println(i.split(" ")[1]);
        }
    }
}