Java程序输出异常:筛选manager员工记录结果不符预期
问题排查与修正:筛选Manager员工记录的Java程序
核心问题
程序无输出的根本原因是**split(".")的使用错误**:
在Java的String.split()方法中,参数是正则表达式,而.是正则的通配符(匹配任意单个字符),所以record.split(".")会把字符串拆分成单个字符的数组,导致fields[2]根本取不到正确的职位字段,自然无法匹配"manager"。
修正后的代码
public class StringBuffer_Filtering_data { public static void main(String[] args) { String [] records={ "1001.ajay.manager.account.45000.male.38", "1002.aiswrya.clerk.account.25000.female.30", "1003.varun.manager.sales.50000.male.35", "1004.amit.manager.account.47000.male.40", "1005.kareena.executive.sales.15000.female.24", "1006.deepak.clerk.sales.23000.male.30", "1007.sunil.accountant.sales.13000.male.29", "1008.satvik.director.purchase.80000.male.45" }; // 原代码中StringBuffer未被使用,可按需移除或利用 for(String record:records) { // 用\\.转义点号,避免正则通配符的影响 String[] fields=record.split("\\."); // 添加数组长度判断,防止格式错误的记录引发数组越界异常 if(fields.length >=3 && fields[2].equals("manager")) { // 若需将输出的点替换为逗号,启用下面这行替换原输出 // System.out.println(record.replace(".", ",")); System.out.println(record); } } } }
关键说明
- 正则转义:要匹配字面量的
.,必须在正则表达式中用\\.转义(第一个\是Java字符串的转义符,第二个\是正则的转义符)。 - 异常防护:添加
fields.length >=3的判断,避免因格式错误的员工记录导致ArrayIndexOutOfBoundsException。 - 输出格式调整:如果需要和预期输出一致(将
.替换为,),使用record.replace(".", ",")处理后再输出即可。
修正后输出
运行修正后的程序,默认输出:
1001.ajay.manager.account.45000.male.38 1003.varun.manager.sales.50000.male.35 1004.amit.manager.account.47000.male.40
启用逗号替换后输出:
1001,ajay,manager,account,45000,male,38 1003,varun,manager,sales,50000,male,35 1004,amit,manager,account,47000,male,40
内容的提问来源于stack exchange,提问作者Pankaj Gupta
相关产品推荐
相关产品推荐

