4

指定された文字列の末尾に「me」が含まれているかどうかをテストする if 条件を作成しています。

Given     Return
-----     ------
Lame      True
Meant     False
Come      True
etc

現在、文字列の長さが 2 文字を超える場合、私のコードは完全に機能しています。

public boolean containsLy(String input) {
  String ly = "ly";
  String lastString = input.substring(input.length() - 2);
  if (input.length() < 2) {
      return false;
  }else if (lastString.equals(ly)) {
      return true;
  }else
      return false;
}

しかし、文字列が 2 文字以下の場合は常に次のエラーが発生します。

StringIndexOutOfBoundsException

これは明らかに負の数が原因ですが、これに対する回避策は思いつきません。

4

4 に答える 4

4

入力の が 2 より小さい場合に戻りたいfalse場合は、入力に対して操作を実行する前にチェックを行うことができます。lengthsubstring

public boolean containsLy(String input) {
  if (input == null || input.length() < 2) {
      return false;
  }
  else {
     String ly = "ly";
     String lastString = input.substring(input.length() - 2);
     if (lastString.equals(ly)) {
       return true;
     }
     else {
       return false;
     }
  }
}

またはもっと簡単:

public boolean containsLy(String input) {
      if (input == null || input.length() < 2) {
          return false;
      }
      else {
         String ly = "ly";
         String lastString = input.substring(input.length() - 2);
         return lastString.equals(ly);
      }
    }

または、すべての if/else 変数を取り除くには (@Ingo に感謝):

public boolean containsLy(String input) {
      return input != null 
             && input.length() >= 2
             && input.substring(input.length() - 2).equals("ly");
}
于 2013-11-14T08:26:13.087 に答える
2

このようにチェックしてみてはいかがでしょうか

boolean endsWithMe = "myteststring".endsWith("me");

あなたが練習のためにそれをしているなら:

擬似コード:

 if length of the given string < 2 then return false
 else substring from index length - 2 to length equals "me"
于 2013-11-14T08:26:04.557 に答える
0

車輪を再発明しないでください。使うだけString#endsWith()

ところで、自分のやり方でうまくいかなかった理由をすでに発見したことは注目に値します。それでも、最初に部分文字列を取得しようとし、それが可能かどうかをテストします。なんで?

于 2013-11-14T08:26:15.380 に答える
0

回避策は簡単です。部分文字列を実行する前に文字列の長さを確認するか、indexOf("me")を使用してインデックスを取得し、長さを使用して位置にあるかどうかを確認しますlength-2

于 2013-11-14T08:28:32.493 に答える