将1个字符串元素转换为整数

时间:2012-12-29 16:18:09

标签: java

编写一个程序,检查String数组是否包含有效数字。如果字符串包含“。”,则将其转换为Double,否则将其转换为Integer.Input应该是字符串{“10.20”,“123456”的数组,“12.invalid”}。

我的问题是123456变为double。我必须将其更改为int.Please help:(

public class Ch7LU3Ex1
{
    public static void main(String[] args)
    {
        String[] str = new String []{"10.20","123456","12.invalid"};
        int i,count=0;
        try
        {
            for(i=0;i<3;i++)
            {
                int l = str[i].length();
                for(int j=0;j<l;j++)
                {
                    if(str[i].charAt(j)=='.')
                    {
                        count++;
                    }
                    else
                    {
                        continue;
                    }
                }
                if(count!=0)
                {
                    double d = Double.parseDouble(str[i]);
                    System.out.println(d);
                }
                else
                {
                    int e = Integer.parseInt(str[i]);
                    System.out.println(e);
                }
            }
        }
        catch(NumberFormatException e)
        {
            System.out.println("Invalid number");
        }
    }
}

7 个答案:

答案 0 :(得分:5)

if(str[i].indexOf('.') == -1) {
    int e = Integer.parseInt(str[i]);
}
else {
    double d = Double.parseDouble(str[i]);
}

这比所有不需要的循环更优雅。祝你好运!

要了解其工作原理,see the String API for indexOf()

答案 1 :(得分:2)

对于您当前使用的方式,您需要在每次迭代中将count重置为0,否则在找到第一个double值后的每个值都将转换为double,因为

countnon-zero。{/ p>

因此,在您的第一个for循环中,您需要在开始时重置计数,如下所示: -

for(i=0;i<3;i++)
{
    count = 0;

现在,你真的让你的任务变得复杂。您根本不需要使用count变量。此外,您不需要nested loop。你可以像这样做一个简单的循环。只是不要自己处理个别角色。 Java库具有已经为您完成的方法。请改用它们: -

for (String str: arr) {
    if (str.contains(".")) {
        double d = Double.parseDouble(str);
    } else {
        int i = Integer.parseInt(str);
    }
}

使用的循环称为enhanced for-loop

String#contains()方法检查字符串是否包含某个字符。或者,您可以使用String#indexOf()方法在字符串中查找.的索引。如果它返回一个正值,那么你的字符串就包含那个字符。

答案 2 :(得分:2)

我根本不会使用循环。我假设你没有随机数据,你知道每个“列”的类型应该是。

String[] str = {"10.20", "123456", "12.invalid"};

double d = Double.parseDouble(str[0]);
int i = Integer.parseInt(str[1]);
String s = str[2];

如果您不知道某个值应该是double还是int,则可以始终将其解析为双精度而不会丢失精度。

答案 3 :(得分:1)

似乎你必须为每个字符串将计数设置回零而你没有这样做。

答案 4 :(得分:0)

再次设置一次迭代后计数为零count=0,在第二次迭代中计数不为零,因此再次考虑为双值

答案 5 :(得分:0)

您必须在每个检查过的元素后将count变量重置为0。这种方式计数递增,因为“10.20”包括一个点,并且不会为“123456”重置。

答案 6 :(得分:0)

您的代码有点混乱,但重点是您不会重置str的每个成员的计数。

因此,如果你在循环中添加一个counter=0;来覆盖一个字符串的所有字符,你可能得到你想要的东西吗?

一些额外的提示:

  • 使用可读变量名称
  • 缩进代码