Сравните значения перечисления Java

Отсюда :

/**
*
*  Base64 encode / decode
*  http://www.webtoolkit.info/
*
**/
var Base64 = {

// private property
_keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",

// public method for encoding
encode : function (input) {
    var output = "";
    var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
    var i = 0;

    input = Base64._utf8_encode(input);

    while (i < input.length) {

        chr1 = input.charCodeAt(i++);
        chr2 = input.charCodeAt(i++);
        chr3 = input.charCodeAt(i++);

        enc1 = chr1 >> 2;
        enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
        enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
        enc4 = chr3 & 63;

        if (isNaN(chr2)) {
            enc3 = enc4 = 64;
        } else if (isNaN(chr3)) {
            enc4 = 64;
        }

        output = output +
        this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +
        this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);

    }

    return output;
},

// public method for decoding
decode : function (input) {
    var output = "";
    var chr1, chr2, chr3;
    var enc1, enc2, enc3, enc4;
    var i = 0;

    input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");

    while (i < input.length) {

        enc1 = this._keyStr.indexOf(input.charAt(i++));
        enc2 = this._keyStr.indexOf(input.charAt(i++));
        enc3 = this._keyStr.indexOf(input.charAt(i++));
        enc4 = this._keyStr.indexOf(input.charAt(i++));

        chr1 = (enc1 << 2) | (enc2 >> 4);
        chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
        chr3 = ((enc3 & 3) << 6) | enc4;

        output = output + String.fromCharCode(chr1);

        if (enc3 != 64) {
            output = output + String.fromCharCode(chr2);
        }
        if (enc4 != 64) {
            output = output + String.fromCharCode(chr3);
        }

    }

    output = Base64._utf8_decode(output);

    return output;

},

// private method for UTF-8 encoding
_utf8_encode : function (string) {
    string = string.replace(/\r\n/g,"\n");
    var utftext = "";

    for (var n = 0; n < string.length; n++) {

        var c = string.charCodeAt(n);

        if (c < 128) {
            utftext += String.fromCharCode(c);
        }
        else if((c > 127) && (c < 2048)) {
            utftext += String.fromCharCode((c >> 6) | 192);
            utftext += String.fromCharCode((c & 63) | 128);
        }
        else {
            utftext += String.fromCharCode((c >> 12) | 224);
            utftext += String.fromCharCode(((c >> 6) & 63) | 128);
            utftext += String.fromCharCode((c & 63) | 128);
        }

    }

    return utftext;
},

// private method for UTF-8 decoding
_utf8_decode : function (utftext) {
    var string = "";
    var i = 0;
    var c = c1 = c2 = 0;

    while ( i < utftext.length ) {

        c = utftext.charCodeAt(i);

        if (c < 128) {
            string += String.fromCharCode(c);
            i++;
        }
        else if((c > 191) && (c < 224)) {
            c2 = utftext.charCodeAt(i+1);
            string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
            i += 2;
        }
        else {
            c2 = utftext.charCodeAt(i+1);
            c3 = utftext.charCodeAt(i+2);
            string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
            i += 3;
        }

    }

    return string;
}

}

кроме того, поиск на "javascript base64, кодирующий" повороты много других опций, вышеупомянутое было первым.

43
задан ripper234 19 July 2009 в 11:09
поделиться

4 ответа

Все перечисления Java реализуют Comparable: http : //java.sun. com / javase / 6 / docs / api / java / lang / Enum.html

Вы также можете использовать метод порядковый , чтобы превратить их в int s, тогда сравнение будет тривиальным .

if (ErrorLevel.ERROR.compareTo(someOtherLevel) <= 0) {
  ...
}
54
ответ дан 26 November 2019 в 22:43
поделиться

Если вы определили их в порядке важности, вы можете сравнить порядковые номера каждого значения. Порядковый номер - это его позиция в объявлении перечисления, где начальной константе присваивается порядковый номер нуля.

Порядковый номер можно получить, вызвав метод ordinal () значения.

8
ответ дан 26 November 2019 в 22:43
поделиться

Я хочу проверить, является ли уровень ошибки «ошибка или выше».

Такое перечисление должно иметь связанный с ним уровень. Поэтому, чтобы найти равные или большие, вам следует сравнить уровни.

Использование порядкового номера зависит от порядка появления значений перечисления. Если вы полагаетесь на это, вы должны задокументировать это, иначе такая зависимость может привести к нестабильному коду.

5
ответ дан 26 November 2019 в 22:43
поделиться

Другой вариант:

enum Blah {
 A(false), B(false), C(true);
 private final boolean isError;
 Blah(boolean isErr) {isError = isErr;}
 public boolean isError() { return isError; }
}

Исходя из вашего вопроса, я предполагаю, что вы используете enum для обозначения какого-либо возвращаемого значения, некоторые из которых являются состояниями ошибки. Эта реализация имеет то преимущество, что не нужно добавлять новые возвращаемые типы в определенном месте (а затем корректировать ваше тестовое значение), но имеет недостаток, заключающийся в необходимости дополнительной работы по инициализации перечисления.

Следуя моему предположению немного дальше , коды ошибок что-то для пользователя? Инструмент отладки? Если последнее, я

1
ответ дан 26 November 2019 в 22:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: