Discuss / Java / 你们怎么有0-9的没看太懂,这样不就行了么,有什么我没考虑到的么

你们怎么有0-9的没看太懂,这样不就行了么,有什么我没考虑到的么

Topic source

#1 Created at ... [Delete] [Delete and Lock User]
import java.util.regex.Matcher;import java.util.regex.Pattern;public class Main {    public static void main(String[] args) {        Pattern p = Pattern.compile("(\\d{0,24}):(\\d{0,59}):(\\d{0,59})");        Matcher m = p.matcher("23:01:59");        if (m.matches()) {            String g1 = m.group(1);            String g2 = m.group(2);            String g3 = m.group(3);            System.out.println(g1);            System.out.println(g2);            System.out.println(g3);        } else {            System.out.println("匹配失败!");        }    }}

Deler

#2 Created at ... [Delete] [Delete and Lock User]

你可以下载一下测试练习看看,其中

"24:00:00"
"23:60:59"
"10:1:2"

都应该为不匹配,但你的代码会认为它们都是匹配的。

因为你的pattern:

"(\\d{0,24}):(\\d{0,59}):(\\d{0,59})"

表示为

0到24个任意数字(0-9) : 0到59个任意数字(0-9) : 0到59个任意数字(0-9)

比如:"12345678901234567890::0987654321" 都会被认为是匹配的,

因为它是20个数字(在0到24的范围内) 加冒号, 加0个数字(在0到59的范围内), 加10个数字(在0到59的范围内)

要想匹配0到23(匹配0到24是不对的,因为小时数最大为23),应该写为:

"[0-1][0-9]|2[0-3]"

它表示:

匹配00到19 或 匹配 20到23


  • 1

Reply