我正在尝试从下面的行中将00
和02
提取到字符串中。
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
我想只抓住两位数字,而不是字符串的其余部分。
答案 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)
您可以使用Pattern
,Matcher
条款。
Matcher m = Pattern.compile("(?<==)\\d+").matcher(string);
while(m.find())
{
System.out.println(m.group());
}
答案 5 :(得分:0)
substring也有一个endIndex。请参阅文档:http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#substring(int,%20int)
答案 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个十六进制字符(此处不区分大小写)。