-2

给定两个字符串,如果其中一个字符串出现在另一个字符串的最末尾,则返回 true,忽略大小写差异(换句话说,计算不应“区分大小写”)。注意: str.toLowerCase() 返回字符串的小写版本。

endOther("Hiabc", "abc") → 真

endOther("AbC", "HiaBc") → 真

endOther("abc", "abXabc") → 真

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% 确定这段代码可以简化,但我不知道其他逻辑或思考这个简单练习的方式

有人可以帮我重构它并使它更小吗?

4

5 回答 5

5
public static boolean endOther(String a, String b) {

    return a.toLowerCase().endsWith(b.toLowerCase()) || 
           b.toLowerCase().endsWith(a.toLowerCase());
}
于 2013-05-12T10:36:50.710 回答
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);
}
于 2013-05-12T10:42:22.423 回答
1

你可以只使用"myString".toLowerCase().endsWith("ing") 你做的循环

于 2013-05-12T10:33:39.183 回答
1

您可以使用正则表达式简单地重构您的代码

1)正则表达式方法

"abC".toLowerCase().matches("bc"+"$");

基本上 bc 是正则表达式的一部分,所以美元符号表示这个目标字符串必须以“bc”结尾。您可以更改此“bc”以满足您的需要。而“abC”是目标字符串。

2) 字符串 endWith 方法

向 Dima Goltsman 致敬

"myString".toLowerCase().endsWith("ing")
于 2013-05-12T10:40:13.510 回答
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语法,但你可以从这段代码中得到想法......

于 2013-05-12T10:41:53.870 回答