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

时间:2012-05-22 07:19:22

标签: java substring

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

"TransactionID=30000001197169 ExecutionStatus=6
        additionalCurrency=KMK
    pin= 0000"

所以他们没有分开;或者,即使有一个空格,它们也不会分开。

我想获得执行状态的价值并将其放在某个字段中? 怎么做到这一点?

感谢您的帮助

5 个答案:

答案 0 :(得分:3)

这很有效。但我不确定这是最优的。它只是解决了你的问题。

    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");
              }
        }
    }

答案 1 :(得分:2)

检查contains() ExecutionStatus=

如果是,则将字符串拆分为ExecutionStatus=

现在从array获取第二个字符串,找到第一个出现非数字字符并使用substring()

答案 2 :(得分:2)

在你的例子中,它们确实被空白分隔,但是下面的内容也应该没有空白。假设您的String存储在String arguments

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();
    }
}

答案 3 :(得分:1)

假设字符串中存在所有空格,则可以正常工作。

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) {
    }
}

答案 4 :(得分:1)

冒着吸引“......现在你有两个问题!”注释,这可能是最容易用正则表达式完成的(str是上面定义的字符串):

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;