java - 如何在正则表达式的帮助下从字符串中获取年、月和日的值

标签 java android regex

<分区>

我正在使用 Android Studio,并且我有一个 date 字符串,它可能是这样的

2018/1/7
2018/10/7
2018/1/30

我想使用正则表达式从中提取年、月和日。 我有这段代码:

int[] getAlarmTimeArray() {
        Matcher m = Pattern.compile("(\\d{4})\\/(\\d{1,2})\\/(\\d{1,2})").matcher(date);
        return new int[]{
                         Integer.parseInt(m.group(1)),
                         Integer.parseInt(m.group(2)), 
                         Integer.parseInt(m.group(3))};
    }

这段代码总是产生:

java.lang.IllegalStateException: No successful match so far

我确信传递给函数的 date 是好的,我也尝试了一些其他模式,但没有。

"(\\d{4})\/(\\d{1,2})\/(\\d{1,2})"

"(\\d{4})/(\\d{1,2})/(\\d{1,2})"

我在 regex demo 上尝试了第一个模式它工作正常。

我不太会使用 Regex,所以请帮助我。

最佳答案

你必须使用 find()

if (m.find()) {
    return new int[]{
        Integer.parseInt(m.group(1)),
        Integer.parseInt(m.group(2)),
        Integer.parseInt(m.group(3))
    };
} else {
    //return default value or throw an exception
}

方案二

还有另一种方法,您可以使用拆分,例如:

String date = "2018/1/7";
String[] split = date.split("/");

return new int[]{
    Integer.parseInt(split[0]),
    Integer.parseInt(split[1]),
    Integer.parseInt(split[1])
}

方案三

如果您使用的是 Java 8,您可以使用 java.time图书馆:

String date = "2018/1/7".replaceAll("/(\\d)/(\\d)$", "/0$1/0$2");

DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy/MM/dd");
LocalDate localDate = LocalDate.parse(date, format);

return new int[]{
    localDate.getYear(),
    localDate.getMonthValue(),
    localDate.getDayOfMonth()
}

或者没有 DateTimeFormatter 你可以使用:

String date = "2018/1/7".replaceAll("/(\\d)/(\\d)$", "-0$1-0$2");
//----------------------------------------------------^---^
LocalDate localDate = LocalDate.parse(date);

关于java - 如何在正则表达式的帮助下从字符串中获取年、月和日的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48140557/

相关文章:

VI中的正则表达式搜索和替换

java - SonarJava-71 使用 javax.annotation.Generate 注释时排除生成代码的问题

java - 如何在数组中添加indexOf以及如何向数组添加元素(java)

java - 在 Java 中,为什么 length 是字符串的方法,而它是数组的变量?

xml - 使用 TableLayout 时填充宽度的按钮

android - 跨栏在 Android 网络浏览器上折叠(使用自动调整页面时)

android - Java Android 传递数据 Array double

c++ - 为什么这个正则表达式不适用于 c++ TR1?

python - 为什么正则表达式卡住了?

java - 使用jdbc连接oracle数据库