开发建筑尺寸转十进制英寸程序:如何测试字符串匹配Pattern列表?
如何测试输入字符串匹配正则模式列表中的任意模式
嘿,我来帮你搞定这个问题!要测试输入字符串是否匹配你定义的任意正则模式,其实步骤很清晰,咱们一步步来:
核心思路
首先把你定义的正则字符串预编译成Pattern对象(这样比每次用字符串匹配性能更好),存到一个列表里。然后遍历这个列表,对输入字符串逐个进行匹配校验,只要有一个模式匹配成功,就说明输入符合要求。
另外注意你提到的空格可能存在或不存在,所以得给你的正则模式加上\\s*(表示0个或多个空格)来兼容这种情况,我会在代码里调整好。
完整代码示例
import java.util.ArrayList; import java.util.List; import java.util.regex.Pattern; import java.util.regex.Matcher; public class DimensionMatcher { public static void main(String[] args) { // 1. 定义并预编译所有正则模式,加入空格兼容 List<Pattern> patternList = new ArrayList<>(); // 匹配类似 12.5' 或 12.5 ' 的格式 patternList.add(Pattern.compile("((\\d+)\\.(\\d+))\\s*'")); // 匹配类似 11" 或 11 " 的格式 patternList.add(Pattern.compile("^(\\d+)\\s*\"$")); // 匹配类似 3/16" 或 3/16 " 的格式 patternList.add(Pattern.compile("(\\d+)\\/(\\d+)\\s*\"")); // 测试用例 String testInput1 = "12.5'"; String testInput2 = "11 \""; String testInput3 = "3/16\""; String testInput4 = "invalid"; // 测试匹配 System.out.println(testInput1 + " 是否匹配:" + matchesAnyPattern(testInput1, patternList)); System.out.println(testInput2 + " 是否匹配:" + matchesAnyPattern(testInput2, patternList)); System.out.println(testInput3 + " 是否匹配:" + matchesAnyPattern(testInput3, patternList)); System.out.println(testInput4 + " 是否匹配:" + matchesAnyPattern(testInput4, patternList)); } // 检查输入字符串是否匹配列表中的任意模式 private static boolean matchesAnyPattern(String input, List<Pattern> patterns) { if (input == null || input.trim().isEmpty()) { return false; } // 遍历所有模式,逐个匹配 for (Pattern pattern : patterns) { Matcher matcher = pattern.matcher(input); // 使用matches()确保整个字符串完全匹配,若允许部分匹配可改用find() if (matcher.matches()) { return true; } } return false; } }
关键细节说明
- 预编译Pattern:每次用
Pattern.compile()预编译后存入列表,避免重复编译正则,提升性能。 - 空格兼容:在正则里添加
\\s*,比如\\s*'表示单引号前可以有0个或多个空格,完美兼容带空格和不带空格的输入。 - 匹配方式选择:用
matcher.matches()会检查整个输入字符串是否完全符合模式;如果你的需求是输入中包含符合模式的片段即可,那就换成matcher.find()。 - 正则锚点:给
numberWithDoubleQuotes加上^和$锚点,确保整个字符串就是数字加双引号,避免出现类似abc12"这种部分匹配的情况。
内容的提问来源于stack exchange,提问作者Ethan Chen
相关产品推荐
相关产品推荐

