最近学习java,想练习自己写一个equals()和equalsIgnoreCase(),equalsIgnoreCase()我是想将两个字符串全部转为小写,然后一个一个比对,但是不知道为什么转完以后再比对,只要长度一样就会返回true。
public class exp5 {
public static void main(String[] args) {
String s1 = "asjnlpp";
String s2 = "ASJNlpl";
System.out.println("结果为:"+equals(s1,s2));
System.out.println("忽略大小写结果为:"+equalsIgnoreCase(s1,s2));
//System.out.println(s1.equalsIgnoreCase(s2));
}
public static boolean equals(String s1,String s2) {
if (s1 == s2) {
return true;
}
byte[] s11 = s1.getBytes();
byte[] s22 = s2.getBytes();
if (s11.length == s22.length) {
for (int i = 0; i < s11.length; i++) {
if (s11[i] == s22[i]) {
return true;
} else {
return false;
}
}
}
return false;
}
public static boolean equalsIgnoreCase(String s1,String s2){
if(s1 == s2){
return true;
}
String str1 = s1.toLowerCase();
System.out.println(str1);
String str2 = s2.toLowerCase();
System.out.println(str2);
return equals(str1,str2);
}
}
主要就是这一步判断有问题,为什么啊
for (int i = 0; i < s11.length; i++) {
if (s11[i] == s22[i]) {
return true;
} else {
return false;
}
求解答
第17行和第19行,表示转为byte[]数组后,有一个元素相同则返回true,所以两行代码错了,可以修改为当不同,则返回false,然后再到循环结束后返回true应该就可以了。
修改如下:
public class exp5 {
public static void main(String[] args) {
String s1 = "asjnlpp";
String s2 = "ASJNlpl";
System.out.println("结果为:"+equals(s1,s2));
System.out.println("忽略大小写结果为:"+equalsIgnoreCase(s1,s2));
//System.out.println(s1.equalsIgnoreCase(s2));
}
public static boolean equals(String s1,String s2) {
if (s1 == s2) {
return true;
}
byte[] s11 = s1.getBytes();
byte[] s22 = s2.getBytes();
if (s11.length == s22.length) {
for (int i = 0; i < s11.length; i++) {
if (s11[i] != s22[i]) {// 当比较转byte[]数组后,有一个元素不同,则返回false
return false;
}
}
// 比较完整个byte[]数组,每个元素都相同,则字符串相同,返回true
return true;
}
return false;
}
public static boolean equalsIgnoreCase(String s1,String s2){
if(s1 == s2){
return true;
}
String str1 = s1.toLowerCase();
System.out.println(str1);
String str2 = s2.toLowerCase();
System.out.println(str2);
return equals(str1,str2);
}
}