java - 将星期几列表转换为带连字符的字符串

标签 java arrays

是否有任何现有的库可用于将星期几的列表转换为带连字符/连接的字符串?

例如:

["Monday", "Tuesday", "Wednesday", "Friday"] 会变成 "Monday - Wednesday, Friday"

该列表将始终包含唯一的日期。所以你永远不会看到 ["Monday", "Monday", "Tuesday", ...]

谢谢!


解决方案

感谢kamoor1982's solution below

我不得不对他的代码进行一些更改以处理边缘情况:

enum DayEnum {
    Monday(1),
    Tuesday(2),
    Wednesday(3),
    Thursday(4),
    Friday(5),
    Saturday(6),
    Sunday(7);

    private int value;

    DayEnum(int x) {
        this.value = x;
    }

    public int getValue() {
        return value;
    }
}
...
public static String concatenateDays(List<String> days) {

    // Null check
    if (days == null || days.isEmpty()) {
        return "";
    }

    // Sort list according to order it appears in calendar with Monday as starting day
    Collections.sort(days, new Comparator<String>() {
        @Override
        public int compare(String lhs, String rhs) {
            DayEnum lhsEnum = DayEnum.valueOf(lhs);
            DayEnum rhsEnum = DayEnum.valueOf(rhs);

            return lhsEnum.compareTo(rhsEnum);
        }
    });

    StringBuffer result = new StringBuffer(days.get(0));
    DayEnum valueOf = DayEnum.valueOf(result.toString());
    int previousIndex = valueOf.getValue();
    int length = days.size();

    for (int i = 1; i < days.size(); i++) {
        String day = days.get(i);
        if (previousIndex + 1 == DayEnum.valueOf(day).getValue()) {
            if (i == length - 1 || DayEnum.valueOf(day).getValue() + 1 != DayEnum.valueOf(days.get(i + 1)).getValue()) {
                result.append(" - ");
                result.append(day);
            }
        } else {
            result.append(", ");
            result.append(day);
        }
        previousIndex = DayEnum.valueOf(day).getValue();
    }
    return result.toString();
}

最佳答案

你可以尝试这样的事情。

enum DAY {
MONDAY(1), 
TUESDAY(2), 
WEDNESDAY(3),
THURSDAY(4),
FRIDAY(5),
SATURDAY(6),
SUNDAY(7);

private int value;

DAY(int x) {
    this.value = x;
}

public int getValue() {
    return value;
}}

然后使用下面的方法进行转换。

public static String concateDays(List<String> days) {

    StringBuffer result = new StringBuffer(days.get(0));
    int previousIndex = DAY.valueOf(days.get(0)).getValue();
    int length = days.size();

    for (int i=1; i< days.size(); i++) {
        String day = days.get(i);
        if(previousIndex + 1 == DAY.valueOf(day).getValue()){
            if(i == length -1 || DAY.valueOf(day).getValue() + 1 != DAY.valueOf(days.get(i+1)).getValue()){
                result.append(" - ");
                result.append(day);
            }
        }else{
            result.append(", ");
            result.append(day);
        }
        previousIndex = DAY.valueOf(day).getValue();
    }
    return result.toString();
}

关于java - 将星期几列表转换为带连字符的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27281262/

相关文章:

java - @Inject 使用组件扫描不注入(inject)并导致 NullPointerException

python - 根据另一个数组对齐 numpy 数组

Javascript - 数组覆盖

java - 如何仅禁用/删除舞台关闭按钮

Java双缓冲与缓冲图像

java - Spring事务中的PROPAGATION_REQUIRED

来自命令行的 javax.swing.JDialog.setAutoRequestFocus 的 Java NoSuchMethodError

javascript - 将js数组分为2个部分

php - 使用PHP将Mysql Select转换为独立于级别的目录结构的多维数组

c - 在C中将已排序数组的索引获取到另一个数组中