gpt4 book ai didi

java - Java中证明一个数是否能被5整除的正则表达式

转载 作者:行者123 更新时间:2023-12-02 18:01:23 24 4
gpt4 key购买 nike

所以,我必须编写一个正则表达式语句来证明一个数字是否可以被 5 整除并返回 true 或 false。因此,经过一些研究,我发现任何以 0 或 5 结尾的数字都可以被 5 整除,因此我尝试将字符串的最后一位数字与 0 或 5 匹配。

但是,它似乎不起作用,因为该方法仅返回 false,尽管它在在线正则表达式检查器上起作用。

public class MyClass {
public static void main(String args[]) {

String[] digits = {"20", "25", "000", "001", "5123456789"};
for (String s : digits){
System.out.println("\"" + s + "\"" + " -> " + proof(s));
}


}

public static boolean proof(String s){
return s.matches("[0|5]$"); // Here is somehow an issue.
}
}

最佳答案

以下是实现此目的的可能方法之一:

public static boolean proof(String s) {
return s.matches("([1-9]\\d*)?[05]");
}

其中 ([1-9]\\d*)? 匹配一组可选字符(即它可能不存在),该字符应以数字开头从 19 后跟零个或多个数字。

注意

  • 不需要管道符号'|'。当您使用方括号[]时,您只需枚举需要匹配的符号,即[05]

  • 当使用 matches() 时,正则表达式将应用于整个字符串,即既不是 ^ 也不是最开始的部分,也没有 $ 不需要在最后。

  • 免责声明:在我对问题陈述的解释中不允许使用前导零。如果此要求不相关,则以下正则表达式就足够了:"\\d*[05]"

为了避免在每次方法调用时编译此正则表达式,我们可以将其提取到 static final 字段中。由于您需要一个 boolean 结果,因此将其保留为 Predicate 会很方便,因为我们可以利用 Java 11 Pattern.asMatchPredicate()

public static final Predicate<String> IS_DIVISIBLE_BY_FIVE =
Pattern.compile("([1-9]\\d*)?[05]").asMatchPredicate();
public static boolean proof(String s) {
return IS_DIVISIBLE_BY_FIVE.test(s);
}

main()

public static void main(String[] args) {
String[] digits = {"20", "25", "000", "001", "5123456789"};

for (String number : digits) {
System.out.println(number + " -> " + proof(number));
}
}

输出:

20 -> true
25 -> true
000 -> false
001 -> false
5123456789 -> false

关于java - Java中证明一个数是否能被5整除的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74321475/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com