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

Java 将1个字符串元素转换为整数,java,Java,编写一个程序,检查字符串数组是否包含有效数字。如果字符串包含,请将其转换为Double,否则将其转换为整数。输入应为字符串数组{10.20,123456,12。无效} 我的问题是123456将更改为double。我必须将其更改为int。请帮助: public class Ch7LU3Ex1 { public static void main(String[] args) { String[] str = new String []{"10.20","123456"

编写一个程序,检查字符串数组是否包含有效数字。如果字符串包含,请将其转换为Double,否则将其转换为整数。输入应为字符串数组{10.20,123456,12。无效}

我的问题是123456将更改为double。我必须将其更改为int。请帮助:

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");
        }
    }
}
这比所有不需要的循环都要优雅得多。祝你好运


为了理解它是如何工作的,

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

似乎每个字符串都必须将计数设置为零,而不是这样做。您需要在每次迭代中将计数重置为0,否则在找到第一个双精度值后的每个值都将转换为双精度值,因为您的计数值在任何情况下都不是零

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

for(i=0;i<3;i++)
{
    count = 0;
使用的循环称为


方法检查字符串是否包含特定字符。或者,您可以使用方法查找的索引。在你的字符串中。如果它返回一个正值,则字符串包含该字符。

在每次检查元素后,必须将计数变量重置为0。由于10.20包含一个点,因此计数会增加,123456不会重置。

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

所以如果你加一个计数器=0;在遍历一个字符串的所有字符的循环中,您可能会得到您想要的

一些额外提示:

使用可读的变量名 缩进代码
我根本不会使用循环。我假设您没有随机数据,并且您知道每列的类型应该是

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,您可以始终将其解析为double而不丢失精度。

请缩进代码。@DOK:@DOK:no,一般不使用家庭作业标记。查看元站点了解详细信息。这不是我的家庭作业。这是我正在学习的JAVA课程的一部分:@sorencito Regex在这方面有点过分了不客气,但是您可以轻松地完成它,而不需要两个for循环。检查其他答案。是的,我总是把变量名弄得乱七八糟,我的代码缩进了,但我把它全部改成放在这个网站上。@Robin。。不客气:
for (String str: arr) {
    if (str.contains(".")) {
        double d = Double.parseDouble(str);
    } else {
        int i = Integer.parseInt(str);
    }
}
String[] str = {"10.20", "123456", "12.invalid"};

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