我想知道是否有方法檢查字符串是否有效。我需要讓用戶輸入多個「-m(數字)」如下:通過檢查字符串來驗證字符串
-m 5 -m444 -m 33
注意,空格並不重要,只要模式是-m(數字)連續。
我目前使用for循環來檢查字符的字符,但發現它乏味。有沒有辦法簡單地使用模式匹配來做到這一點,而不需要手動檢查字符?
編輯:-m 5 -m444 -m 33 344
應該是無效的,因爲344的背後應該是-m 344
或-m344
我想知道是否有方法檢查字符串是否有效。我需要讓用戶輸入多個「-m(數字)」如下:通過檢查字符串來驗證字符串
-m 5 -m444 -m 33
注意,空格並不重要,只要模式是-m(數字)連續。
我目前使用for循環來檢查字符的字符,但發現它乏味。有沒有辦法簡單地使用模式匹配來做到這一點,而不需要手動檢查字符?
編輯:-m 5 -m444 -m 33 344
應該是無效的,因爲344的背後應該是-m 344
或-m344
我的事情-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。
太棒了,但道歉我錯過了我的問題。如果用戶鍵入「-m 5 -m444 -m 33 344」會怎麼樣?在這種情況下,後面的'344'是無效的,因爲它應該是'-m 344'或'-m344' – stackyyflow
你可以自由地測試我的第二個代碼塊,並親自看看'-m 5 -m444 -m 33 344'將會打印「錯誤」。如果你使用我的第一種模式,你將只捕獲5,444和33(但不會拋出錯誤)。 –
這樣做的好方法是使用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解決方案,但我認爲對於這樣的簡單案例來說,這已經足夠了:)
https://docs.oracle.com/javase/8/docs/api/java/lang /String.html#matches-java.lang.String- –