【发布时间】:2020-03-17 08:08:44
【问题描述】:
我想找出一个字符串是否以一个字符(出现在 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)");
但如果你有一个通用的解决方案,我更喜欢它。
感谢您的关注
【问题讨论】:
-
字符串必须以字符开头?如果是这样,只对您提到的约束进行编码会更容易理解。此外,不清楚您所说的“外观总和”是什么意思。
-
对不起,“外观总和”是 a 和 b 2 个字符的总和。 a和b的个数之和必须是10。