从一个字符串中提取两个子字符串

时间:2015-05-29 09:33:27

标签: java regex string

我正在尝试从下面的行中将0002提取到字符串中。

invokestatic:indexbyte1=00 indexbyte2=02 

我正在使用此代码,但它无法正常工作:

String parse = "invokestatic:indexbyte1=00 indexbyte2=02";

String first = parse.substring(check.indexOf("=") + 1);
String second= parse.substring(check.lastIndexOf("=") + 1);

这似乎适用于秒字符串,但第一个字符串值是

00 indexbyte2=02

我想只抓住两位数字,而不是字符串的其余部分。

7 个答案:

答案 0 :(得分:2)

如果你没有在substring方法中指定第二个参数,它将导致从起始索引到字符串结尾的子字符串,这就是为什么你得到" 00 indexbyte2 = 02&#34 ; first

指定最后一个索引,仅在提取first

的值时提取两位数
String first = parse.substring(check.indexOf("=") + 1, check.indexOf("=") + 3);

答案 1 :(得分:2)

您可以将正则表达式模式与组一起使用,如下所示:

public static void main(String[] args) {
    String input = "invokestatic:indexbyte1=00 indexbyte2=02";

    Pattern pattern = Pattern.compile(".*indexbyte1=(\\d*) indexbyte2=(\\d*)");
    Matcher m = pattern.matcher(input);
    if (m.matches()) {
        System.out.println(m.group(1));
        System.out.println(m.group(2));
    }
}

答案 2 :(得分:1)

试试这个:

String first = parse.substring(check.indexOf("=") + 1, check.indexOf("=") + 3);

check.indexOf("=") + 3将获取02,并且将成为子字符串的endindex。目前你没有指定endindex因此它也是indexbyte2=02,因为substring不知道在哪里停止因此它会解析到最后。

答案 3 :(得分:1)

String parse = "invokestatic:indexbyte1=00 indexbyte2=02";

        String first = parse.substring(parse.indexOf("=") + 1,
                parse.indexOf("=") + 3);
        String second = parse.substring(parse.lastIndexOf("=") + 1);
        System.out.println(first + ",   " + second);

答案 4 :(得分:1)

您可以使用PatternMatcher条款。

Matcher m = Pattern.compile("(?<==)\\d+").matcher(string);
while(m.find())
{
System.out.println(m.group());
}

答案 5 :(得分:0)

答案 6 :(得分:0)

如果输入的基本格式为invokestatic:indexbyte1=00 indexbyte2=02 ... indexbyte99=99,则可以使用正则表达式:

Pattern p = Pattern.compile("indexbyte\\d+=([a-fA-F0-9]{2})");
Matcher m = p.matcher(input);
while( m.find() ) {
  String idxByte = m.group(1);
  //handle the byte here
}

这假定这些字节的标识符为indexbyteN,但可以用另一个标识符替换。此外,这假定字节以十六进制提供,即2个十六进制字符(此处不区分大小写)。