2017-07-31 46 views
0

我有一個模式來獲得java的春天模式匹配字符串

String string = "max_len[5];" 

數量5可爲0-9

現在什麼,我需要檢查,如果MAX_LEN那麼一個模式,如果它是我需要獲得5

if(string = "max_len" //regex){ 
    int = regex for the number 5; 
} 
+0

*「檢查max_len是否爲模式」* - 這是什麼意思?是。*您的條款模式? – luk2302

+0

基本上我有一個sting,它是「max_len [4]」不,我需要檢查sting是否包含單詞「max_len」 –

+3

難道你不能只使用一個簡單的註冊教程爲Java?它應該像'max_len \ [(\ d)\]一樣簡單''我把它留給你如何在Java中使用該註冊表:) – xander

回答

1

我建議你去通過tutorial on regular expressions因爲這將幫助雙方你解決你的問題,但更重要的是瞭解你應該怎麼解決,今後類似的問題。

無論如何,你想使用Java的Pattern這匹配max_len並提取數字在同一時間。這裏是你如何做到這一點:

Pattern pattern = Pattern.compile("max_len\[(?<maxLength>\d)\];"); 
Matcher match = pattern.matcher(string); 
if (match.matches()) { 
    int maxLength = Integer.parseInt(match.group("maxLength")); 
    print("The maximum length is " + match.group("maxLength")); 
} else { 
    print("The string didn't match the pattern"); 
} 

模式分解成以下幾點:

  • max_len\[字符串MAX_LEN匹配[
  • (?<maxLength>\d)創建一個任何一個數字相匹配的匹配組命名的最大長度
  • \];匹配字符串];

你可以得到正則表達式超過在regex101.com更徹底的崩潰,你也可以玩它,並嘗試了其中的輸入字符串匹配而哪些不會。

如果我們獲得成功的匹配,我們可以提取名爲maxLength的組的值並將其解析爲整數。我們知道,在不捕捉任何異常的情況下解析爲整數是安全的,因爲只有當它是數字時模式纔會匹配,所以字符串max_length [five];將導致match.matches()返回false

如果你想允許更大的數字,單個數字,你可以將\d更改爲\d+。加號表示任意數量的數字,但至少有一個數字將被匹配。如果使用星號(*),您將匹配任意數量的數字,包括無數字,這將導致Integer.parseInt引發異常,因爲空字符串("")不是有效數字。

0

在這裏您正則表達式,你想:

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class HelloWorld{ 

    public static void main(String args[]) { 
     // String to be scanned to find the pattern. 
     String line = "max_len[5];"; 
     String pattern = "^max_len\\[(\\d+)\\];$"; 

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

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

以下代碼應該可以工作:

String regex = "^max_len\\[(\\d+)\\];$"; 
String stringPattern = "max_len[5];"; 
Pattern pattern = Pattern.compile(regex); 
Matcher matcher = pattern.matcher(stringPattern); 
if(matcher.find()){ 
    int maxLength = Integer.valueOf(matcher.group(1); 
} 
0

試試這個。

String string = "max_len[9]"; 
String number = string.replaceFirst("^max_len\\[(\\d)\\]$", "$1"); 
if (!number.equals(string)) { 
    int n = Integer.parseInt(number); 
    System.out.println(n); 
} 

結果

9