第一题:
有一串字符串 求出当中最大的数字:
如: “asd446sd2146asd" 求出当中最大数字——6。
看到这题的我想法就是用ASCLL吗但是一下子不晓得用什么方法转型(主要是当时脑子懵懵,后面笔试完反应过来怎么做了)。
直接 把String转byte类型数组就可以了,自然会转换成ASCLL吗,最后比较然后—48就行了
String s = "sdasd546sdas0";
byte[] bytes = s.getBytes(StandardCharsets.UTF_8);
byte flag = 0;
for (byte aByte : bytes) {
if (48 <= aByte && aByte <=57){
if (aByte > flag){
flag = aByte;
}
}
}
System.out.println(flag-48);
第二题(这题的解我感觉我写的有问题,应该有别的调优方法)
(有一个注意点就是Spring没办法直接用 ”.“ 切割,需要转义,因为.是特殊字符 )
比较版本号:如 1.236.25 > 1.212.15.32
public String test() {
String s1 = "1.325.21.32";
String s2 = "1.325.212";
String[] sR1 = s1.split("\\.");
String[] sR2 = s2.split("\\.");
int length = sR1.length;
if (sR2.length < length){
length = sR2.length;
}
for (int i = 0; i < length; i++) {
int flag = compare(sR1[i],sR2[i]);
if ( flag == -1 ){
return s1;
} else if ( flag == 1 ){
return s2;
}
}
if (sR1.length > sR2.length){
return s1;
}else if (sR1.length < sR2.length){
return s2;
}
return "0";
}
//-1表示 s1 > s2
//0表示 s1 = s2
//1表示 s1 < s2
public int compare(String s1, String s2){
byte[] b1 = s1.getBytes();
byte[] b2 = s2.getBytes();
int length = b1.length;
if (length > b2.length){
length = b2.length;
}
for (int i = 0; i < length; i++) {
if (b1[i] > b2[i]){
return -1;
} else if (b1[i] < b2[i]){
return 1;
}
}
if (b1.length > b2.length){
return -1;
}else if (b1.length < b2.length){
return 1;
}
return 0;
}