Java查询联系人电话时如何实现无内容返回?
问题:根据姓名查询联系人电话时,如何实现无匹配时不输出任何内容?
现有查询方法代码
public String nameToPhone(String inputName) { /* (c) Allow the user to search a contact’s phone number using his/her name. */ Pattern p; Matcher m; // Store name as pattern p = Pattern.compile(inputName); // Match pattern with array name m = p.matcher(this.name); if (m.matches()) return this.phoneNum; else return null; }
调用方式
通过System.out.print(phonebookArray[i].nameToPhone(inputName))调用该方法。
问题现象
- 当else分支返回
null时,匹配到姓名会同时显示电话号码和"null" - 当else分支返回空串
""时,匹配到姓名会同时显示电话号码和空白行
需要实现的效果:仅在查询姓名存在时显示电话号码,无匹配时完全不输出任何内容
解决办法
核心是不要直接把方法返回值丢给System.out.print,而是先判断有效性再输出,或者直接调整方法逻辑:
方案1:修改调用逻辑(推荐,不改动原有方法)
先获取方法返回结果,判断结果不为null且非空时再执行输出:
String phoneResult = phonebookArray[i].nameToPhone(inputName); if (phoneResult != null && !phoneResult.isEmpty()) { System.out.print(phoneResult); }
方案2:调整方法本身的逻辑
把方法返回类型改成void,直接在方法内部处理输出,无匹配时什么都不做:
public void nameToPhone(String inputName) { Pattern p = Pattern.compile(inputName); Matcher m = p.matcher(this.name); if (m.matches()) { System.out.print(this.phoneNum); } // 无匹配时不执行任何输出操作 }
调用时直接执行phonebookArray[i].nameToPhone(inputName)即可。
额外提示:如果只是做姓名的完全匹配,用this.name.equals(inputName)比正则匹配更简洁高效,除非你需要支持模糊正则查询的场景。
内容的提问来源于stack exchange,提问作者Fathul Fahmy
相关产品推荐
相关产品推荐

