2017-05-12 8 views
0

"2つの文字列を指定すると、いずれかの文字列が他の文字列の最後に表示され、大文字と小文字の違いを無視してtrueを返します大文字と小文字を区別しないでください)。2つの等しい文字列が.equals()と比較するとfalseを返します

2つの変数をテストするとき、部分文字列は2つの文字列のうちの短いものと同じですが、if文でもfalseを返します。

これは、文字列に関するバットのコーディングに関する解決策の私の試みです。大文字と小文字の区別をなくすために、文字列を新しい文字列として保存しました。参考のため、リンクはhereです。 1

public boolean endOther(String a, String b) { 

    String x = a.toLowerCase(); 
    String y = b.toLowerCase(); 
    int xl = a.length(); 
    int yl = b.length(); 

    if(xl > yl && x.substring(yl, xl).equals(y)) return true; 
    if(xl < yl && y.substring(xl, yl).equals(x)) return true; 
    if(xl == yl && x.equals(y)) return true; 
    else return false; 
} 
+2

何を入力していますか? –

+5

提供されたリンク内のタスクを読んだら、[String#endsWith](https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#endsWith java.lang.String)))。 –

+0

プログラムは、文字列aおよびbの任意のインスタンスをテストしています。私は参考のためにバットをコーディングする際の問題へのリンクを付けました。 –

答えて

2

使用している部分文字列のオーバーロードされたバージョンを使用すると、文字列の一方が他方で終わるかどうかを確認されなければならないすべてを考慮不要です。

  • xlylより大きい場合、あなたがしなければならないすべてはあなたのサブはStringの終わりまでxl-ylに開始すべきである意味、 x.substring(xl-yl).equals(y)です。
  • xlyl未満の場合は、y.substring(yl-xl).equals(x)です。Stringの最後まで部分文字列がyl-xlから始まることを意味します。

完全なソリューション:コメントの中に述べたように

public boolean endOther(String a, String b) { 
     String x = a.toLowerCase(); 
     String y = b.toLowerCase(); 
     int xl = a.length(); 
     int yl = b.length(); 

     if(xl > yl && x.substring(xl-yl).equals(y)) return true; 
     if(xl < yl && y.substring(yl-xl).equals(x)) return true; 
     if(xl == yl && x.equals(y)) return true; 
     else return false; 
} 

しかし、あなたはString#endsWithを使用して方がいいでしょう。

関連する問題