使用冒号(“:”)Java String拆分无法按预期工作

时间:2012-04-28 16:11:15

标签: java split colon

我正在尝试删除此字符串的秒数:

10/31/2009 9:46:16 AM

我正在尝试使用以下函数执行此操作:

public static String correctValue4(String str) {
    String parts[] = str.split(":");
    String fixedStr = parts[0] + ":" + parts[1];
    return fixedStr;
}

我认为它会解析它并获得10/31/2009 9然后在最后添加46。但是,我在运行时收到“java.lang.ArrayIndexOutOfBoundsException:1”错误。显然,它没有拿起零件[1]。

有什么想法吗?

额外的业力:我需要将AM / PM追加到字符串的末尾。所以,最后看起来应该是这样的:

10/31/2009 9:46 AM

谢谢,非常感谢您的帮助=)

编辑:

对不起,我应该更具体地说明日期。我正在做的是接受一个制表符分隔的文本文件到应用程序,然后格式化它并将其输出到一个新文件。我需要做的就是根据请求从日期中删除秒并输出;我想我只是让它复杂化了。

蒂姆的答案适用于这种情况!

谢谢大家,他们提出了建议!

4 个答案:

答案 0 :(得分:6)

我会完全建议不同的方法:将值解析为适当的特定于域的类型(我使用Joda Time中的LocalDateTime),然后以您想要的格式重新格式化它。这将同时执行验证,因此您不会因为碰巧在其中包含冒号而在系统中传播错误数据。

Joda Time提供解析和格式设施(请参阅DateTimeFormatDateTimeFormatter),因此它应该非常简单。

答案 1 :(得分:4)

为什么不使用SimpleDateFormat

首先解析日期:

Date d = new SimpleDateFormat("MM/dd/yyyy h:mm:ss a").format(str);

然后格式化日期:

new SimpleDateFormat("MM/dd/yyyy h:mm a").format(d);

答案 2 :(得分:1)

如果空格是下面的下一个字符,你不能只删除后跟两位数的冒号吗?

String resultString = subjectString.replaceAll(":\\d{2}(?= )", "");

答案 3 :(得分:1)

如果String始终具有相同的格式(秒数以2位数结尾,空格为AM或PM),您可以使用每个{substring方法提取相关部分String 1}}实例

String original = "10/31/2009 9:46:16 AM";
//-6 since we want to remove the : as well
String firstPart = original.substring( 0, original.length() - 6 );
String secondPart = original.substring( original.length() - 3, original.length() );
String result = firstPart + secondPart;