给定两个字符串,如果其中一个字符串出现在另一个字符串的最末端,则返回true,忽略大小写差异(换句话说,计算不应该是“区分大小写”)。注意:str.toLowerCase()返回字符串的小写版本。
endOther(“Hiabc”,“abc”)→true
endOther(“AbC”,“HiaBc”)→true
endOther(“abc”,“abXabc”)→true
public class endOtherClass{
public static void main(String args[]) {
boolean is = endOther("yz","12xz") ;
System.out.println(is) ;
}
public static boolean endOther(String a, String b) {
a = a.toLowerCase() ;
b = b.toLowerCase() ;
if( a.length() == b.length()){
System.out.println("a and b have same length!") ;
if(a.equals(b)){
System.out.println("wow, even better - they are exact same") ;
return true ;
}
else {
System.out.println("but are diff!") ;
return false ;
}
}
String shorter = "" ;// figure out which - a or b - is shorter
String longer = "" ;// and which one is longer
if( a.length() > b.length() ){ shorter = b ; longer = a ;}
else { shorter = a ; longer = b ;}
int offset = longer.length() - shorter.length() ; // the offset is used to know where exactly to start comparing
//go through the shorter and compare the corresponding part of the longer string
for(int i = 0 ; i < shorter.length() ; i++){
System.out.println("comparing subs: " + shorter.substring(i,i+1) + " and " + longer.substring(offset+i, offset+i+1)) ;
if( !shorter.substring(i,i+1).equals( longer.substring(offset+i, offset+i+1) ) ){ //we add offset so we can start comparing the last n characters of shorter string!
System.out.println("something wrong in long: " + longer.substring(offset+i, offset+i+1)) ;
System.out.println("something wrong in short: " + shorter.substring(i,i+1)) ;
return false ;
}
}
return true ;
}
}
我90%肯定这段代码可以简化,但我不知道其他逻辑或思考这个简单的练习
有人可以帮我重构并缩小它吗?
答案 0 :(得分:5)
public static boolean endOther(String a, String b) {
return a.toLowerCase().endsWith(b.toLowerCase()) ||
b.toLowerCase().endsWith(a.toLowerCase());
}
答案 1 :(得分:2)
不要忘记检查空案例。
public static boolean endOther(String a, String b) {
if(a == null || b == null) {
return false;
}
String lowerA = a.toLowerCase();
String lowerB = b.toLowerCase();
return lowerA.endsWith(lowerB) || lowerB.endsWith(lowerA);
}
答案 2 :(得分:1)
你可以使用"myString".toLowerCase().endsWith("ing")
而是你做过的循环
答案 3 :(得分:1)
您可以使用正则表达式
简单地重新计算代码1)正则表达式方法
"abC".toLowerCase().matches("bc"+"$");
基本上bc是正则表达式的一部分,因此美元符号表示此目标字符串必须以“bc”结尾。你可以改变这个“bc”以满足你的需要。而“abC”是目标字符串。
2)字符串endWith方法
向Dima Goltsman致敬
"myString".toLowerCase().endsWith("ing")
答案 4 :(得分:0)
您可以这样做:
public static boolean endOther(String a, String b) {
int minLength = Math.min(a.length, b.length);
a = a.substring(a.length - minLength).toLower();
b = b.substring(b.length - minLength).toLower();
return a.equals(b);
}
我不确定Java语法,但你可以从这段代码中获得想法......