我正在尝试重新格式化一些日期字符串。他们中的一些人的年份在开头,而我希望那些人的年份在最后。我还想将分隔符标准化为下划线。
示例输入:
07_April_2008
16_05_2012
2016-01-28
14/12/2009
期望的输出:
07_April_2008
16_05_2012
01_28_2016
14_12_2009
这是我的第一次尝试,但是当我这样做时出现错误:
public String format(String date) {
String[] format = null;
date = date.replace("-", "_");
date = date.replace("/", "_");
if (date.contains("_")) {
format = date.split("_");
// new arrayList to add rearrangement to
ArrayList<String> formatNew = new ArrayList<String>();
for (int i = 0; i < format.length; i++) {
if (format[i].matches("\\d{4}")) {
formatNew.add(2, format[i]);
} else {
formatNew.add(format[i]);
}
}
}
return date;
}
这会产生错误:
java.lang.IndexOutOfBoundsException: Index: 2, Size: 0
我认为年份可以很好地提取出来,但数组中的其他两个元素没有。
最佳答案
我会将其视为字符串问题:
List<String> dates; // given this
dates = dates.stream()
.map(s -> s.replaceAll("\\W", "_")) // anything not a letter or number becomes _
.map(s -> s.replaceAll("(\\d{4})_(.*)", "$2_$1")) // reorganise leading year dates
.collect(Collectors.toList());
如果您只想格式化日期字符串:
str.replaceAll("\\W", "_").replaceAll("(\\d{4})_(.*)", "$2_$1")
如果你想保留分隔符(只更改为下划线以使你的代码工作):
str.replaceAll("(\\d{4})(.)(.*)", "$3$2$1")
关于java - 在特定位置将数组重新排序为 arrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37407552/