You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Java中String.split结果无法存入数组,数组为空引发元素访问异常求助

嘿,我一眼就瞅出问题所在啦!

问题根源

你调用的String.split()方法,参数是正则表达式,而.在正则里是个特殊字符——它代表“匹配任意单个字符”。所以当你写input.split(".")时,相当于把输入字符串的每一个字符都当作分隔符来切割,最后得到的自然就是空数组,这也就难怪coordinates[0]coordinates[1]会报空啦!

解决办法

你需要把.转义成字面意义上的点号。在Java里,正则的转义字符得用两个反斜杠\\(第一个反斜杠是Java字符串本身的转义符),所以正确的写法应该是:

String[] coordinates = input.split("\\.");

要是你嫌记转义规则麻烦,还可以用Pattern.quote()方法来包裹分隔符,它会自动把特殊字符转成字面量,不用手动转义:

import java.util.regex.Pattern;

// 其他代码不变
String[] coordinates = input.split(Pattern.quote("."));

测试一下

比如你输入3.5,用上面两种方式分割后,coordinates数组就会变成["3", "5"],后续的Integer.parseInt就能正常把字符串转成整数,调用playingfield.PlayTurn(c1, c2)也不会出错啦。

额外小提醒

你的正则表达式^[0-6][.][0-6]$是正确的,这里用[.]来匹配点号没问题(字符类里的.会被当作字面量),当然也可以写成^[0-6]\\.[0-6]$,两种写法效果完全一样,选你顺手的就行~

内容的提问来源于stack exchange,提问作者Samuel

火山引擎 最新活动