如何使用JAVA从字符串中获取一个子字符串的特定值?

如何使用JAVA从字符串中获取一个子字符串的特定值?,java,substring,Java,Substring,我有一个字符串字段,格式如下: "TransactionID=30000001197169 ExecutionStatus=6 additionalCurrency=KMK pin= 0000" 所以他们并没有和一些人分开;或者,即使只有一个空格,它们也不会分开 我想获取执行状态的值,并将其放在某个字段中? 如何做到这一点 感谢您的帮助检查它是否包含()ExecutionStatus= 如果是,则使用ExecutionStatus= 现在从数组中提取第二个字符串,找到第

我有一个字符串字段,格式如下:

"TransactionID=30000001197169 ExecutionStatus=6
        additionalCurrency=KMK
    pin= 0000"
所以他们并没有和一些人分开;或者,即使只有一个空格,它们也不会分开

我想获取执行状态的值,并将其放在某个字段中? 如何做到这一点

感谢您的帮助

检查它是否包含()
ExecutionStatus=

如果是,则使用
ExecutionStatus=


现在从
数组
中提取第二个字符串,找到第一个出现的非数字字符,并使用
子字符串()

在您的示例中,它们确实是用空格分隔的,但以下内容也应该在没有空格的情况下使用。假设字符串存储在
字符串参数中

String executionStatus;
String[] anArray = arguments.split("=");
for (int i; i < anArray.length; i++)
    if (anArray[i].contains("ExecutionStatus")){
        executionStatus = anArray[++i].replace("additionalCurrency","");
        executionStatus = executionStatus.trim();
    }
}
字符串执行状态;
字符串[]anArray=arguments.split(“”);
for(int i;i
这很有效。但我不确定这是不是最理想的。它只是解决了你的问题

    String s = "TransactionID=30000001197169ExecutionStatus=6additionalCurrency=KMKpin=0000";
    if(s!=null && s.contains("ExecutionStatus="))
    {
        String s1[] = s.split("ExecutionStatus=");
        if(s1!=null &&  s1.length>1)
        {
            String line = s1[1];
            String pattern = "[0-9]+";

              // Create a Pattern object
              Pattern r = Pattern.compile(pattern);

              // Now create matcher object.
              Matcher m = r.matcher(line);
              if (m.find( )) {
                 System.out.println("Match");
                 System.out.println("Found value: " + m.group(0) );

              } else {
                 System.out.println("NO MATCH");
              }
        }
    }

假设字符串中存在所有的空白,这是可行的

String str = "\"TransactionID=30000001197169 ExecutionStatus=6\n" +
        "        additionalCurrency=\"KMK\"\n" +
        "    pin= \"0000\"\"";
int start = str.indexOf("ExecutionStatus=") + "ExecutionStatus=".length();
int status = 0;

if (start >= 0) {
    String strStatus = str.substring(start, str.indexOf("additionalCurrency=") - 1);
    try {
        status = Integer.parseInt(strStatus.trim());
    } catch (NumberFormatException e) {
    }
}
冒着吸引“…现在你有两个问题!”评论的风险,这可能是用正则表达式最容易做到的(str是上面定义的字符串):


你能给我写一份最短的cod吗?抱歉打扰了,我已经提供了足够的(肮脏的)信息,请检查api文档并尝试自己编写我的结果是“6 additionalCurrency”,因此我必须从结果中删除additionalCurrency谢谢。一个小问题-如果additionalCurrency不总是字符串中的第二个参数怎么办?首先感谢您的帮助,这没关系,executionStatus是哪个位置。当顺序可能改变时,您应该正确地修剪字符串。您可以将所有出现的参数(如
“additionalCurrency”
)替换为
,或者使用其他选项修剪字符串(可能还为空)。上述代码是动态的。6之后的内容或ExecutionStatus=之前的内容并不重要。它只会根据您的需要搜索ExecutionStatus的值,因为您可以看到代码使用了正则表达式。它搜索[0-9+]表示任意长度的数值。
Pattern p = Pattern.compile("ExecutionStatus\\s*=\\s*(\\d+)"); // Whitespace matching around equals for safety, capturing group around the digits of the status)
Matcher m = p.matcher(str);
String status = m.find() ? m.group(1) : null;