JTextField字符串拆分与IntParse异常:海龟图形项目求助
排查海龟图形命令输入的常见问题
Hey,我之前做类似的图形项目时也踩过字符串处理的坑,咱们一步步来揪出问题所在!
最可能的元凶:空白字符处理不当
你用split(" ")来分割字符串的话,很容易因为输入里的多余空格出问题:
- 比如用户不小心输入了前后空格:
" forward 100 ",用split(" ")分割后会得到["", "forward", "", "100", ""]这样的数组,这时候你取parts[1]是命令没问题,但取parts[2]去转整数就会拿到空字符串,直接触发NumberFormatException。 - 或者输入中间有多个空格,同样会生成空的数组元素。
解决办法是先给输入做**trim()**去掉前后空格,再用\\s+(匹配任意数量的空白字符,包括空格、制表符等)来分割:
String rawInput = commField.getText(); // 先清理前后空白,再按任意空白分割 String[] parts = rawInput.trim().split("\\s+");
容易忽略的大小写问题
如果你的代码里是严格判断parts[0].equals("forward"),那用户输入Forward或者FORWARD都会不匹配,直接进入错误提示分支。可以把命令转成统一大小写再判断:
String command = parts[0].toLowerCase(); if (command.equals("forward")) { // 执行前进逻辑 }
数组越界的隐藏坑
如果split后的数组长度不是2(比如用户只输入了forward没输数字),直接去取parts[1]会触发ArrayIndexOutOfBoundsException,所以在处理前一定要先判断数组长度:
if (parts.length != 2) { JOptionPane.showMessageDialog(null, "请输入正确格式的命令,比如'forward 100'"); return; }
快速排查技巧
在处理输入的代码里加一行打印,看看实际分割后的数组内容,就能直观看到问题:
System.out.println(Arrays.toString(parts));
比如运行后控制台输出["forward", "100"]就是正常的,如果输出里有空字符串或者长度不对,就对应上面的问题啦。
内容的提问来源于stack exchange,提问作者Sam Lightowler
相关产品推荐
相关产品推荐

