如何检查字符串是否为浮点数?

时间:2016-01-31 02:24:02

标签: java string floating-point

在我的程序中,我要将用户输入存储在一个数组中,然后检查每个字符以查看它是否为数字或点或E或负号后我将其存储在一个名为temps的数组中。

现在我的逃逸方法()中存在问题,我不应该如何处理浮动数字数字 - 数字 - 数字 - 数字(例如12.22)的模式

我的工作在这里:

public void sorting(String data) {
    String[] temps = new String[200];
    int cpos = 0;
    int tpos = 0;

    Arrays.fill(temps, null);

    if (str.isEmpty() == false) {
        char char1 = str.charAt(cpos);

        int i = 0;
        while (i < str.length()) {
            char1 = str.charAt(cpos);

            char1 = str.charAt(tpos);
            System.out.println("the current value is  " + char1 + " ");
            tpos++;

            if (Character.isDigit(char1)) {
                temps[cpos] = "Digit";
                // System.out.println(" this number is digit");
                cpos++;
            } else if (char1 == 'e' || char1 == 'E') {
                temps[cpos] = "s_notaion";
                cpos++;
            } else if (char1 == '-') {
                temps[cpos] = "negative";
                cpos++;
            } else if (char1 == '.') {
                temps[cpos] = ".";
                cpos++;
            }
            i++;
        }
    }
}

这是浮点数的方法

private static boolean floating(String [] data) {
    int count =0;
    boolean correct = false;
    for (int i = 0; i < data.length; i++) {

         if (data[i]== "Digit" )
             && data[i]=="." && data[i]"Digit"){
             // here is the problem for the condition 
         }

    }
    return false; 
}

4 个答案:

答案 0 :(得分:1)

测试String是否可以表示float的最简单方法是尝试解析它:

String testString = "1.2345";
double result;
try {
  result = Double.parseDouble(testString);
  System.out.println("Success!")
  }
catch (NumberFormatException nfe) {
  // wasn't a double, deal with the failure in whatever way you like
}

答案 1 :(得分:1)

问题缺乏一些背景,所以对于我的回答,我会假设这是需要手动解决方案的作业,并且所有浮点数都应该被接受。

你的方法(虽然过度设计)是半正确的:你将输入字符串缩减为字符类 - 数字,符号,指数标记。缺少的是现在你必须确保这些字符类的顺序正确。

识别浮点数的各个部分(只看0,1.0,400E30,42.1E-30),你会看到它们按特定顺序排列,即使有些是可选的,并且每个部分都强加限制在那里允许的字符。例如,如果数字中有“E”,则必须后跟一个数字(带有可选符号)。

因此,当您逐步浏览字符串的字符时,请考虑如何跟踪数字中的位置,并根据该字符验证(这是@JonKiparsky提到的状态机)。

一些小事:

  • 不要将字符串与'=='进行比较 - 使用equalsTo()。
  • 想想如果sorting()找到既不是数字,符号或指数'E'的字符又意味着什么?
  • 您为200个条目分配temps数组,但输入字符串可能更大。

答案 2 :(得分:1)

使用正则表达式是Handel这个问题的最佳方法

private static boolean floating(String [] data) {
        int count =0;
        boolean correct = false;
        for (int i = 0; i < data.length; i++) {

            if (str.matches("((-|\\+)?[0-9]+(\\.[0-9]+)?)+")){
                System.out.println(" it's a floating number ");
                correct= true;
                break;
             }else 
                 correct = false;

        }if (correct ==true){
            return true;
        }else 
        return false; 

    }

答案 3 :(得分:0)

如果我理解正确,数据阵列有[“数字”,“数字”,“。”,“数字”]等东西

所以你想要

private static boolean floating(String [] data) { 如果数组只有“Digit”条目并且只有一个“。”,则返回true的方法。条目?是吗?

如果是这样的话:

boolean foundLeDigit = false;
for (int i = 0; i < data.length; i++) {

     if (data[i].equals("Digit") == false && data[i].equals(".") == false  {
        //we found something other than a Digit or . it's not a float
       return false;
     }
    if(data[i].equals(".")) { 
     if(foundLeDigit) { return false; //as we found 2 "." }
    foundLeDigit = true
    }


}
return foundLeDigit; 
相关问题