使用String.matches匹配"100 Thumbtacks"返回false及参数异常求助
嘿,别着急,刚接触编程遇到这类问题太正常了!我来帮你捋清楚你碰到的问题——String.matches()返回false和调用setDescription()触发参数异常,这俩其实是紧密关联的,咱们一步步拆解:
核心问题:
String.matches()的特性误解 你可能没注意到,String.matches()方法的规则是必须让整个字符串完全匹配传入的正则表达式,而不是“包含”匹配。举个例子:如果你的setDescription方法里用了类似!description.matches("^[A-Za-z ]+$")的校验(只允许字母和空格),那当你传入带数字的"100 Thumbtacks"时,字符串里的"100"就会导致整个匹配失败,进而触发参数异常。
针对性解决方案
根据你的需求,分两种情况处理:
情况1:允许描述包含数字、字母和空格
修改InventoryItem类里setDescription的正则校验规则,把数字加入允许的字符范围:
public void setDescription(String description) { // 校验规则:非空,且仅包含字母、数字、空格 if (description == null || !description.matches("^[A-Za-z0-9 ]+$")) { throw new IllegalArgumentException("描述格式无效,请检查输入"); } this.description = description; }
情况2:需求是描述只能是纯文本(不含数字),但文件内容是“数量+描述”格式
这种情况下,你需要先把从Inventory.txt读取的内容拆分,分离数量和描述:
// 假设读取的每一行内容是line = "100 Thumbtacks" // 只分割一次,把数量和描述分开(避免描述里有空格的情况) String[] lineParts = line.split(" ", 2); int itemQuantity = Integer.parseInt(lineParts[0]); String itemDescription = lineParts[1]; // 此时传入setDescription的是纯文本"Thumbtacks",就能通过校验了 InventoryItem item = new InventoryItem(); item.setDescription(itemDescription); item.setQuantity(itemQuantity);
额外排查小技巧
- 检查
Inventory.txt的每一行是否有多余的空格、制表符或者特殊字符(比如全角空格),这些隐形字符也会导致matches匹配失败; - 仔细核对
setDescription里的正则表达式,确认它和你的实际需求完全匹配(比如是否允许大小写、有没有长度限制等)。
内容的提问来源于stack exchange,提问作者Ronnie Ripley
相关产品推荐
相关产品推荐

