gpt4 book ai didi

java - 模式java : 2 caracters less than n times and their sum of appereance less n too

转载 作者:太空宇宙 更新时间:2023-11-04 09:01:50 25 4
gpt4 key购买 nike

我想查找一个字符串是否以一个字符(出现在 1 和 9 之间)和第二个字符(出现在 1 和 9 之间)开始,但它们出现的总和必须(恰好)为 10,总数必须为 10。第一个字符的数量 + 第二个字符的数量 = 10。

我想知道是否可以一次性完成,或者是否不可能:是否应该分两次完成。

我的第一个字符是空格:“\s”我的第二个字符是数字,但不是 0 : [1-9][0-9]*

但是你可以用a和b来解释,我稍后会调整它。

String w = "         1"          //ok
String x = " 123456789" //ok
String z = " 123456789" //must be not ok (11 char)
String y = " 123456789" //must be not ok

Pattern my_pattern = patter.compile("^\\s+[1-9][0-9]*");
Pattern my_pattern2 = patter.compile("^\\s{1,9}[1-9][0-9]{1,9}");

my_pattern 不好,他允许了太多模式。

my_pattern2对空格数和位数进行了限制,但对总和没有限制,我该怎么做?

解决方案是这样写 9 种可能性:

Pattern my_pattern3 = patter.compile("(a{1}b{9}|a{2}b{8}|a{3}b{7}|etc)");

但如果你有通用的解决方案,我更喜欢它。

感谢您的关注

最佳答案

嗨 Jules,欢迎来到 Stack Overflow!

TLDR;您已经给出的答案是使用正则表达式执行此操作的唯一方法

为了回答您的问题,我们需要讨论正则表达式,这是 java Pattern 类用来匹配文本字符串的内容(wikipedia here)。正则表达式只能匹配一小类模式,称为正则语言。众所周知,它们不能用于检查括号是否匹配:

(((())())())() <-- Like this

我们在这里遇到的问题是正则表达式无法检查是否有相同数量的东西(即左括号和右括号)。这与检查两个长度加起来是否为 10 的问题非常相似。但是,因为在您的情况下,可能性的数量是有限的(与匹配括号不同),因此可以做到这一点,但只能通过像您已经完成的那样枚举所有可能的情况。恐怕没有更好的方法只用正则表达式来做到这一点。

关于java - 模式java : 2 caracters less than n times and their sum of appereance less n too,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60718464/

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