重构这个冗长但简单的代码 - 字符串比较

时间:2013-05-12 10:29:57

标签: java string

给定两个字符串,如果其中一个字符串出现在另一个字符串的最末端,则返回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%肯定这段代码可以简化,但我不知道其他逻辑或思考这个简单的练习

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

5 个答案:

答案 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语法,但你可以从这段代码中获得想法......