java - 在特定位置将数组重新排序为 arrayList

标签 java arrays string date arraylist

我正在尝试重新格式化一些日期字符串。他们中的一些人的年份在开头,而我希望那些人的年份在最后。我还想将分隔符标准化为下划线。

示例输入:

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/

相关文章:

java - Android:如何告诉我的 Activity 从我的服务启动新 Activity ?

java - % 在 url http 请求 java 中

javascript - 与数组变量绑定(bind)时,IonSelect 和 ionCheckBox 不起作用

PHP - 从字符串中删除所有非数字字符

java - Cassandra 的 Spark2 session ,sql 查询

java - 单例是有状态的吗?

javascript - native Array.prototype.sort() 和 _.sortBy() 以不同方式对值进行排序

java - 如何在java方法中将数组作为参数传递?

ruby-on-rails - 带分号的字符串在 RubyMine 中产生 "unterminated string meets end of file"

ruby - 在一串数字中删除前导 0 的优雅方法?