2009-07-27 15 views

答えて

3

StringTokenizerでは可能ではないと思われますが、古すぎます。あなたは仕事をするスキャナを使用することができますクラスの

Scanner fi = new Scanner("string 200 200.0"); 
fi.useLocale(Locale.US); 

while (fi.hasNext()) { 
    if (fi.hasNextInt()) { 
     System.out.println("Integer: " + fi.nextInt()); 
    } else if (fi.hasNextDouble()) { 
     System.out.println("Double: " + fi.nextDouble()); 
    } else { 
     System.out.println("String: " + fi.next()); 
    } 
} 

ドキュメントは、あなたのanwserのためhere

0

私は剰余演算子を使用します。

if (yourNval % 1 > 0) 
{ 
    // nval is floating point. 
} 
else 
{ 
    // nval is an integer. 
} 

これは、Javaでの弾性率がworks with floating point numbersだけでなく、整数ために動作します。

UPDATE:あなたはゼロ値の小数部分とダブルスの整数を区別する必要があると指定しているので、私はあなたが以下のような何かを持っていると思う:

Double(yourNval).toString().indexOf('.'); 

ので、より完全な機能の意志あなたは、本質的にdoubleintであるかどうかを把握しようとしているとして、あなたはBigDecimalを作成し、そのscale()メソッドをテストすることができます

if (yourNval % 1 > 0) 
{ 
    // nval is floating point. 
} 
else 
{ 
    // nval is an integer. 

    // Find number of trailing zeroes. 
    String doubleStr = Double(yourNval).toString(); 
    int decimalLoc = doubleStr.indexOf('.'); 
    int numTrailingZeroes = 0; 

    if (decimalLoc > 0) 
    { 
     numTrailingZeroes = doubleStr.length() - decimalLoc - 1; 
    } 
} 
+0

おかげですが、入力は「200.0」や「200」だった場合、これは私に教えてくれありません。 – Pierre

+0

私は上記のコードを追加して、整数 'nval'入力に含まれる末尾のゼロの数を決定しました。あなたの例である '200.0'は' numTrailingZeroes'の値が '1'になります。 –

+0

もう一度、あなたのソリューションはfloat値を使用しますが、StreamTokenizerが解析した元のトークンについては教えてくれません。 – Pierre

0

:ように見えます。また、Math静的メソッドfloor()を使用して、元の値との戻り値をテストすることもできます。両者の

if(Math.floor(myStreamTokenizer.nval) == myStreamTokenizer.navl)) { 
    //treat it as an int 
} else { 
    //treat it as a double 
} 

それがより効率的であるように、私は、Math.floorオプションを使用します。

+0

あなたのanwserに感謝しますが、入力が '200.0'か '200'かどうかはわかりません。 – Pierre

+0

はフィールドが二重であるため、「200」は常に「200.0」になります。 – akf

関連する問題