2017-02-20 81 views
1

我想知道是否有方法檢查字符串是否有效。我需要讓用戶輸入多個「-m(數字)」如下:通過檢查字符串來驗證字符串

-m 5 -m444 -m 33 

注意,空格並不重要,只要模式是-m(數字)連續。

我目前使用for循環來檢查字符的字符,但發現它乏味。有沒有辦法簡單地使用模式匹配來做到這一點,而不需要手動檢查字符?

編輯:-m 5 -m444 -m 33 344

應該是無效的,因爲344的背後應該是-m 344-m344

+0

https://docs.oracle.com/javase/8/docs/api/java/lang /String.html#matches-java.lang.String- –

回答

1

我的事情-m\s*[0-9]+去會做什麼你想。

注意,在Java正則表達式,你需要躲避\:-m\\s*(?<number>[0-9]+)

編輯:我添加了一個捕獲組,所以你可以使用它像:

private static final Pattern PATTERN = Pattern.compile("-m\\s*(?<number>[0-9]+)"); 

public static void main(String[] args) { 

    String test = "-m 5 -m444 -m 33 "; 
    Matcher matcher = PATTERN.matcher(test); 
    while(matcher.find()){ 
     System.out.println(matcher.group("number")); 
    } 

} 

返回:

5 444 33

編輯:如果你不關心解析,你可以去以下:

private static final Pattern PATTERN_VALIDATION = Pattern.compile("(\\s*-m\\s*[0-9]+\\s*)+"); 

public static void main(String[] args) { 

    String test = "-m 5 -m444 -m 33 "; 
    Matcher matcher = PATTERN_VALIDATION.matcher(test); 
    System.out.println(matcher.matches()); 

} 

將打印true

雖然檢查-m 5 -m444 -m 33 344將打印爲false。

+0

太棒了,但道歉我錯過了我的問題。如果用戶鍵入「-m 5 -m444 -m 33 344」會怎麼樣?在這種情況下,後面的'344'是無效的,因爲它應該是'-m 344'或'-m344' – stackyyflow

+1

你可以自由地測試我的第二個代碼塊,並親自看看'-m 5 -m444 -m 33 344'將會打印「錯誤」。如果你使用我的第一種模式,你將只捕獲5,444和33(但不會拋出錯誤)。 –

2

這樣做的好方法是使用Java正則表達式。您可以使用下面的示例來驗證碼:

String str = "-m 5 -m444 -m 33"; 
str.matches("(-m\\s?\\d+)(\\s+(-m\\s?\\d+))*") //returns true 

要獲得正則表達式的擊穿請訪問以下鏈接:regex101

基本上第一部分,(-m\s?\d+),匹配一個「-m」,零點或一個空格字符,然後一個或多個小數點後的字符。休息匹配相同的模式,零到很多次,中間有空格。

也有更奇特的方法來做同樣的正則表達式,但我的正則表達式不是那個級別。也許別人可以貢獻更多的DRY解決方案,但我認爲對於這樣的簡單案例來說,這已經足夠了:)