我正在尝试让这些代码在获得某人出生日期并且必须以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]);
}
变量在上面正确声明(我假设如此)。因为他们与其他案件合作。 如果不清楚,请随时提出任何问题,并提前致谢。
答案 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。