1

いくつかの行を解析してその値を確認しようとしています。たとえば、次の文字列を使用します。

   " 1 ON OFF";

次のことを確認する必要があります。

  • 最初の文字は空白です。
  • 2番目の文字はintです。
  • 3番目の文字は空白です。
  • 4番目の文字は2文字で、オンになっています。
  • 5番目の文字は空白です。
  • 6番目の文字は3文字で、OFFです。

正規表現を使用してこれを一度に行うことができますが、必要なのは、各チェックの後に、次のように正しいかどうかを表示する必要があることです。

   System.out.println("1st character is not a blank : incorrect");
   System.out.println("1st character is blank : correct");

Scannerこれにクラスを使用することを考えましたが、最初の文字を検出しようとする1と、文字列が空白ではなく表示されます。

   " 1 ON OFF";

   public class NewClass {    

    public void StringExample(){
        String str = " 1 ON OFF";

        Scanner sc = new Scanner(str);
        System.out.println(sc.next());
    }

    public static void main(String args[]){
        NewClass nc = new NewClass();
        nc.StringExample();
    }
}

これを簡単に実行できるJavaの他のクラスはありますか?

4

5 に答える 5

2

私が考えることができる最も近いものは、単語の境界による分割です。

String tokens[] = " 1 ON OFF".split("\\b");

次の配列が得られます。

{ " ", "1", " ", "ON", " ", "OFF" }

それはあなたの順序と1番目から6番目の「文字」の定義に適合します。

于 2012-08-20T05:40:50.107 に答える
1

String.split(" ")を使用して、スペースを分割してみてください。配列を取得します。最初の文字が空白の場合、配列の最初の文字はString空の文字列になります。

String strs[] = " 1 ON OFF".split(" ");

この例では、次の配列を取得します["", "1", "ON", "OFF"]

最初の文字がスペースの場合、最初の要素として空の文字列を取得します。先頭に2つのスペースがある場合、最初の2つの要素として空の文字列が表示されます。残りの文字列は、元の文字列からスペースで区切られたトークンになりますが、トークン間に追加のスペースがある場合は、配列要素として追加の空の文字列が表示されます。

結果の配列(数値のを含む)をループすると、parseInt説明したルールに一致することができます。

区切り文字を空の文字列に設定することで、同様に文字列をトークン化するために使用できることに注意してください。Scanner

Scanner sc = new Scanner(str);
sc.useDelimiter("");
System.out.println(sc.next());
于 2012-08-20T05:39:03.847 に答える
1

文字列を文字ごとにスキャンできるStringReaderを確認する価値があります。もう1つのオプションは、各文字(String#charAt)を読み取り、それがルールを満たしているかどうかを確認することです。

于 2012-08-20T05:46:04.420 に答える
1

パーボイルドを使用して、小さな文法を宣言できます。

于 2012-08-20T05:52:46.880 に答える
1

別の選択肢:

public static void main(String[] args) throws IOException
    {

        String patternString = " 1 ON OFF";
        boolean pass = true;

            if (patternString.charAt(0) != ' ' && patternString.charAt(2) != ' ') {
                pass = false;
            }

            int digit = Character.getNumericValue(patternString.charAt(1));

            if (digit < 0 && digit > Integer.MAX_VALUE) {
                pass = false;
            }

            if (patternString.charAt(3) != 'O' && patternString.charAt(4) != 'N') {
                pass = false;
            }

            if (patternString.charAt(5) != ' ' && patternString.charAt(6) != 'O' && patternString.charAt(7) != 'F' && patternString.charAt(8) != 'F') {
                pass = false;
            }

            if (pass) {
                System.out.println("Validation pass");
            }
    }
于 2012-08-20T05:54:22.320 に答える