2015-05-29 244 views
1

我試圖從下面一行中將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 

我想只抓住兩位數字而不抓住字符串的其餘部分。

+0

第1步:分割空白。第2步:分開'='。 – 2015-05-29 09:36:18

+1

@Dawson你需要告訴'substring()'何時停止。 – Biffen

+0

格式總是一樣嗎?如果是這樣,你可以使用'Pattern'和'Matcher'的正則表達式。 – Thomas

回答

2

如果不指定子方法的第二個參數,它會導致從起始索引字符串的結尾,這就是爲什麼你會得到「00 indexbyte2 = 02」爲first一子。

只有指定的最後一個索引中提取兩個數字,當你爲first

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

感謝這項工作 – Dawson

1

提取值試試這個:

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

check.indexOf("=") + 3將採取02,將成爲endindex的字符串。目前你沒有指定endindex,因此它也採用indexbyte2=02,因爲substring不知道停止在哪裏,因此它解析下來直到結束。

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); 
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)); 
    } 
} 
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個十六進制字符(這裏不區分大小寫)。

1

您可以使用Pattern,Matcher clases。

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