使用“。”时,数组索引超出范围错误。

时间:2013-08-08 05:42:47

标签: java indexoutofboundsexception

我正在尝试让这些代码在获得某人出生日期并且必须以dd / mm / yyyy将其拆分并使用“。”时才能使用。作为将日,月,月分开的东西。我设法让它为其他角色工作,如“/”,“”,“ - ”。当我尝试使用“。”我得到一个数组索引超出范围异常错误。

if(input.contains("."))
{
String[] tokens = input.split(".");
day = Integer.parseInt(tokens[0]);
intMonth = Integer.parseInt(tokens[1]);
year = Integer.parseInt(tokens[2]);
}

变量在上面正确声明(我假设如此)。因为他们与其他案件合作。 如果不清楚,请随时提出任何问题,并提前致谢。

8 个答案:

答案 0 :(得分:8)

java中的String.split使用输入字符串作为正则表达式。在正则表达式中,句点匹配任何字符,因此将在字符串中的每个字符上进行拆分。为了做你想做的事,你想要在"\\."上拆分,这将逃脱正则表达式中的句号,这样它只能分割句号而不是任何字符。

答案 1 :(得分:3)

您需要转义.字符。改变这个:

String[] tokens = input.split(".");

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

答案 2 :(得分:3)

String.split()使用正则表达式作为参数,.(点)是保留字符;你需要以这种方式逃避它input.split("\\."); 使用new SimpleDateFormat("dd.MM.yyyy").parse(input)将更加健壮和轻松

答案 3 :(得分:1)

使用

input.split("\\.")

代替

答案 4 :(得分:1)

试试这个:

if(input.contains("."))
{
String[] tokens = input.split("\\.");
day = Integer.parseInt(tokens[0]);
intMonth = Integer.parseInt(tokens[1]);
year = Integer.parseInt(tokens[2]);
}

答案 5 :(得分:0)

您的代码只是检查至少有一个句点字符位于input,但您没有确认您有一个完整的dd.mm.yyyy日期。通常,每当你得到ArrayIndexOutOfBoundsException时,最好在异常之前在线上设置一个断点并手动检查数组的内容;它经常会发现你没有预料到的一些不匹配。

您是否有理由不仅使用DateFormat

答案 6 :(得分:0)

你确定输入了吗?因为它可能只是“。”,导致数组的长度较短。同时使用\\.匹配.

  String[] tokens = input.split("\\.");
  day      = token.length > 0 ? Integer.parseInt(tokens[0]) : 0;
  month    = token.length > 1 ? Integer.parseInt(tokens[1]) : 0;
  year     = token.length > 2 ? Integer.parseInt(tokens[2]) : 0;

答案 7 :(得分:0)

检查javadoc始终是一个不错的选择,请参阅String#split(String regex)。正如其他人所指出的,String#split采用正则表达式。阅读正则表达式here