1

在获取某人的出生日期并且必须将其拆分为 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]);
}

变量在上面正确声明(我假设是这样)。当他们处理其他案例时。如果不清楚,请随时提出任何问题,并提前感谢。

4

8 回答 8

8

Java 中的 String.split 使用输入字符串作为正则表达式。在正则表达式中,句点匹配任何字符,因此将拆分字符串中的每个字符。要执行您想要的操作,您需要拆分"\\."哪个会转义正则表达式中的句点,以便它只会拆分句点字符,而不是任何字符。

于 2013-08-08T05:45:51.410 回答
3

您需要转义.角色。改变这个:

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

String[] tokens = input.split("\\.");
于 2013-08-08T05:47:18.520 回答
3

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

于 2013-08-08T05:47:37.760 回答
1

利用

input.split("\\.")

反而

于 2013-08-08T05:47:24.163 回答
1

尝试这个:

if(input.contains("."))
{
String[] tokens = input.split("\\.");
day = Integer.parseInt(tokens[0]);
intMonth = Integer.parseInt(tokens[1]);
year = Integer.parseInt(tokens[2]);
}
于 2013-08-08T05:50:30.067 回答
0

您的代码只是检查至少一个句点字符是否包含在 中input,但您并没有验证您是否拥有完整的dd.mm.yyyy日期。一般来说,每当你得到一个ArrayIndexOutOfBoundsException,最好在异常前的行设置一个断点并手动检查数组的内容;它会经常揭示一些你没有预料到的不匹配。

你有理由不只是使用DateFormat吗?

于 2013-08-08T05:46:14.780 回答
0

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

于 2013-08-08T05:49:33.473 回答
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;
于 2013-08-08T05:49:23.420 回答