2009-07-27 34 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()); 
    } 
} 

文档是here

0

我会使用模运算符:

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

这工作,因为在Java中,以及整数模works with floating point numbers

更新:既然你指定一个需要从零值小数部分双打区分整数,我认为你必须做一些这样的:

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

所以一个更完整的功能看起来像:

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

谢谢您anwser,但是这并没有告诉我,如果输入的是“200.0”或“200”。 – Pierre 2009-07-27 12:11:42

+0

我已经添加了上面的代码来确定整数`nval`输入包含的尾随零的数量。你的例子`200.0`将导致`numTrailingZeroes`的值为`1`。 – 2009-07-27 12:55:34

0

当你基本上是想弄清楚如果doubleint与否,你可以创建一个BigDecimal并测试其scale()方法。您也可以使用Math静态方法floor()并针对原始值测试返回值。

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

在这两个,我会用Math.floor选择,因为它会更有效。

相关问题