0

文字を含む5桁の文字列、次に「-」と3つの数字を要求するプログラムを作成しています。(eG:A-123)区切り文字「-」を指定したsplitを使用して、文字と数字ですが、入力がその正確な形式と異なる場合、全体がバラバラになります。したがって、私の質問は、特定の形式に適合しない入力をブロックする方法です。

私がこれまでに使用しているコード:

public Room(String Combo) {

   if (Combo.length() == 5){
      String delimiter = "-";
      String[] temp = Combo.split(delimiter);
      long FloorRoomNo = Integer.parseInt(temp[1]);
      long Floor = FloorRoomNo/100;
      long RoomNo = FloorRoomNo/100;

      this.Floor = (int)Floor;
      this.RoomNo = (int)RoomNo;
      Buildning = temp[0]:
   }else{
      System.err.println("Wrong input length");
      System.exit(-1);
   }
}
4

1 に答える 1

8

メソッドを使用String#matchesして、指定された入力が特定のパターンにあるかどうかを確認できます。そのメソッドは正規表現を取ります。あなたはそれをこのように使うことができます:-

if (combo.matches("[a-zA-Z]-\\d{3}")) {
    // valid format
}

if入力文字列が説明した形式の場合、上記の条件はtrueを返します。すなわち:-

[a-zA-Z]   // Start with a letter
 -         // Followed by a hyphen
\\d{3}     // And then 3 digits.

そして、フォローしてくださいJava Naming Convention。変数には小文字で名前を付けます。


コメントで指摘されているように、上記の方法を使用すれば、分割する必要さえありません。を使用して、個々のコンポーネントを抽出できますcapture groups。したがって、上記のパターンを次のように変更します。-

([a-zA-Z])-(\\d{3})

そして、あなたはそれぞれグループ1グループ2にあなたの手紙と数字を持っています。ただし、ここPatternMatcherクラスを使用する必要があります。

于 2013-01-26T10:08:55.750 に答える