0

String引数を受け入れるメソッドがあります。

文字列には、整数、long、double、boolean、または単なる古い文字と数字を含めることができます。

文字列のタイプを簡単に判別する方法が必要です。

1つの方法は、多数のtry catchブロックを用意して、それを各タイプに解析しようとすることです。例外がスローされた場合、それはおそらくそのデータ型ではありません。これはヒューリスティックであり、決定論的なプログラムではないため、間違っているように思われます。

4

4 に答える 4

2

一般的に、それが何であるかを知る必要があると想定されていると思います。通常、このようなパラメーターは既知であるか、メタデータに付属しています。正規表現を使用して、数字や終止符などのマーカーを探すことができます。

便利なパターン:

Pattern.compile("(?:\\+|\\-)?\\d+\\.\\d+");` // Matches a double.
Pattern.compile("(?:\\+|\\-)?\\d{numberOfDigitsBeforeYouWantToCallItALong,}"); // Matches longs.
Pattern.compile("(?:\\+|\\-)?\\d{,numberOfDigitsBeforeYouWantToCallItALongMinusOne}"); // Matches ints.
Pattern.compile("true|false|t|f|yes|no|y|n"); // Matches booleans.

それ以外はすべて文字列です。

編集:あなたの編集から、それがどのように使用されるかを追加したことがわかります。"(?:\\+|\\-)?\\d+"数字を検出するために使用できます。ターゲットタイプがintまたはlongの場合は、それを受け入れて、数字に基づくのではなく、ターゲットタイプとして解析します。桁の。Exceptionまたは、とにかく予想されるタイプがわかっているので、適切なタイプに直接解析して、をキャッチすることもできます。

于 2012-07-12T08:13:50.193 に答える
1

パラメータがわかったらタイプがどうあるべきかがわかっている場合は、文字列をそのタイプに解析して例外をキャッチするのは問題ありません。例外を使用して無効なデータをキャッチするのが適切です(1つのタイプのみを試している場合)。 ..)

于 2012-07-12T08:21:56.750 に答える
0

特殊なケースは、true、false、および数値の3つだけです。文字列が「true」であるかどうかを確認し、次に「false」であるかどうかを確認してから、Double.parseDouble()を使用します(longはdoubleに収まる可能性があるため)。trueまたはfalseに等しくなく、Double.parseDoubleが例外をスローする場合、それは単なる文字列です。

于 2012-07-12T08:50:03.417 に答える
-1

Scannerクラスを使用できますか?

String input = "1 fish 2 fish red fish blue fish";
Scanner s = new Scanner(input).useDelimiter("\\s*fish\\s*");
System.out.println(s.nextInt());
System.out.println(s.nextInt());
System.out.println(s.next());
System.out.println(s.next());
s.close(); 

出力します

1
2
Red
Blue

おそらく複雑なものやあなたが望むものに

于 2012-07-12T08:15:07.010 に答える