java 将位映射到字符串

java mappings bits to strings

我们将星期几表示为整数。

1 = sunday
2 = monday
4 = tuesday
8 = wednesday
16 = thursday
32 = friday
64 = saturday

当我们得到一个 88 的整数时 - 这意味着 64 + 16 + 8,所以我们需要得出时间表是星期三、星期四和星期六。

我是按照下面的方法做的,但我想还有更好的方法...

public List<String> getDays(int input) {
    List days = new ArrayList();
    days.add( (sunday & input!=0) ? "SUN" : "");
    days.add( (monday & input!=0) ? "MON" : ""); 
    ...
    ...
    return days;
}

只需使用包含日期和循环的数组。

public static void main(String[] args) {
    System.out.println(getDays(88)); // [WED, THU, SAT]
}

public static List<String> getDays(int input){
    List<String> days = new ArrayList<String>();
    String[] daysArr = {"SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"};
    for (int i = 0 ; i < 7 ; i++){
        if ((input & 1 << i) != 0){
            days.add(daysArr[i]);
        }
    }
    return days;
}

您可以使用数字的二进制表示:88 是二进制的 1011000,因此只需检查设置为 "one" 的位并打印相应的星期几

static void checkNumber(int x){
    BigInteger bigX=BigInteger.valueOf(x);
    if(bigX.testBit(0))
        System.out.println("sunday");
    if(bigX.testBit(1))
        System.out.println("monday");
    if(bigX.testBit(2))
        System.out.println("tuesday");
    if(bigX.testBit(3))
        System.out.println("wednesday");
    if(bigX.testBit(4))
        System.out.println("thursday");
    if(bigX.testBit(5))
        System.out.println("friday");
    if(bigX.testBit(6))
        System.out.println("saturday");
}