我发现了一个简单的&在javascript中很好的Base64库,并想从中创建一个java类(我知道这个purpuse的现有java库!,但我不感兴趣)。所以这里有一段使用isNaN的javascript代码..我需要一个java等价的
if (isNaN(chr2)) {
enc3 = enc4 = 64;
} else if (isNaN(chr3)) {
enc4 = 64;
}
并包含javascript函数:
// private property
_keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
private static final Integer NaN = 0;
public static String encode(String input){
StringBuffer output = new StringBuffer();
int chr1 = 0, chr2 = 0, chr3 = 0;
int enc1, enc2, enc3, enc4;
int i = 0;
input = _utf8_encode(input);
while (i < input.length()) {
//before: chr1 = Character.codePointAt(input, i++);
if (i+1>=input.length()){
chr1 = NaN;
i++;
} else {
chr1 = Character.codePointAt(input, i++);
}
if (i+1>=input.length()){
chr2 = NaN;
i++;
} else {
chr2 = Character.codePointAt(input, i++);
}
if (i+1>=input.length()){
chr3 = NaN;
i++;
} else {
chr3 = Character.codePointAt(input, i++);
}
enc1 = chr1 >> 2;
enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
enc4 = chr3 & 63;
//System.out.println(chr2+ " -> "+ String.valueOf(Character.toChars(chr2)) + "| "+String.valueOf(Character.toChars(chr2)).length());
//System.out.println(chr3+ " -> "+ String.valueOf(Character.toChars(chr3)) + "| "+String.valueOf(Character.toChars(chr3)).length());
if (isNaN(chr2)) {
enc3 = enc4 = 64;
} else if (isNaN(chr3)) {
enc4 = 64;
}
output.append(_keyStr.charAt(enc1))
.append(_keyStr.charAt(enc2))
.append(_keyStr.charAt(enc3))
.append(_keyStr.charAt(enc4));
}
return output.toString();
}
private static boolean isNaN(int charCodePoint){
if(charCodePoint==NaN)
return true;
else
return false;
}
我在java的最后一次尝试是使用:
Character.isDigit((char)chr2)..不行......
参见isNaN(int charCodePoint)..也不行
并包含java等效函数:
// String _keyStr =“ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 + / =”;
public static String encode(String input){
StringBuffer output = new StringBuffer();
int chr1, chr2, chr3;
int enc1, enc2, enc3, enc4;
int i = 0;
input = _utf8_encode(input);
while (i < input.length()) {
chr1 = Character.codePointAt(input, i++);
chr2 = Character.codePointAt(input, i++);
chr3 = Character.codePointAt(input, i++);
enc1 = (chr1 >> 2);
enc2 = (((chr1 & 3) << 4) | (chr2 >> 4));
enc3 = (((chr2 & 15) << 2) | (chr3 >> 6));
enc4 = (chr3 & 63);
if (Character.isDigit((char)chr2)==false) {
enc3 = enc4 = 64;
} else if (Character.isDigit((char)chr3)==false) {
enc4 = 64;
}
output.append(_keyStr.charAt(enc1))
.append(_keyStr.charAt(enc2))
.append(_keyStr.charAt(enc3))
.append(_keyStr.charAt(enc4));
}
return output.toString();
}
什么是正确的java等效于javascript的isNaN函数?
答案 0 :(得分:1)
没有适用于您案件的直接等效词。
在调用codePointAt()
之前,您需要检查索引是否在边界内。如果不是,那么如果您的JavaScript代码从NaN
获得charCodeAt()
,那就等效了。但是,这会使代码的其余部分大大复杂化。
简而言之,JavaScript代码的编写方式不适合简单易用的Java转换。
答案 1 :(得分:0)
请尝试以下方法检查号码。
try{
Integer.parseInt("your char/value");
System.out.println("Its a number.");
}catch(Exception e){
System.out.println("Not a number.");
}
答案 2 :(得分:-1)
也许试试这个:
public static boolean isNaN(char chr){
try{
Integer.parseInt(new String(new char[]{chr}));
return false;
}catch (Exception e) {
}
return true;
}
抱歉,已修复