验证String是否与实数匹配

时间:2015-03-01 00:38:50

标签: java string recursion

我试图验证String匹配/是否是实数。为此,我创建了这个方法:

public static boolean Real(String s, int i) {

  boolean resp = false;
  //
  if ( i == s.length() ) {
     resp = true;
  } else if ( s.charAt(i) >= '0' && s.charAt(i) <= '9' ) {
     resp = Real(s, i + 1);
  } else {
     resp = false;
  }
  return resp;
}

public static boolean isReal(String s) {

  return Real(s, 0);
}

但显然它仅适用于圆形数字。任何人都可以给我一个如何做到这一点的提示吗?

P.S:我只能使用s.charAt(int) e length() Java函数。

4 个答案:

答案 0 :(得分:0)

您需要使用Regex。用于验证字符串是否包含浮点数的正则表达式是:

^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$

答案 1 :(得分:0)

public static boolean isReal(String str) {
    boolean real = true;
    boolean sawDot = false;
    char c;
    for(int i = str.length() - 1; 0 <= i && real; i --) {
        c = str.charAt(i);
        if('-' == c || '+' == c) {
            if(0 != i) {
                real = false;
            }
        } else if('.' == c) {
            if(!sawDot)
                sawDot = true;
            else
                real = false;
        } else {
            if('0' > c || '9' < c)
                real = false;
        }
    }
    return real;
}

答案 2 :(得分:0)

你可以尝试做这样的事情。添加了递归解决方案。

public static void main(String[] args) {
    System.out.println(isReal("123.12"));
}

public static boolean isReal(String string) {
    boolean delimiterMatched = false;
    char delimiter = '.';
    for (int i = 0; i < string.length(); i++) {
        char c = string.charAt(i);
        if (!(c >= '0' && c <= '9' || c == delimiter)) {
            // contains not number
            return false;
        }
        if (c == delimiter) {
            // delimiter matched twice
            if (delimiterMatched) {
                return false;
            }
            delimiterMatched = true;
        }
    }
    // if matched delimiter once return true
    return delimiterMatched;
}

递归解决方案

    public static boolean isRealRecursive(String string) {
         return isRealRecursive(string, 0, false);
    }

    private static boolean isRealRecursive(String string, int position, boolean delimiterMatched) {
        char delimiter = '.';
        if (position == string.length()) {
            return delimiterMatched;
        }
        char c = string.charAt(position);
        if (!(c >= '0' && c <= '9' || c == delimiter)) {
           // contains not number
           return false;
        }
        if (c == delimiter) {
            // delimiter matched twice
            if (delimiterMatched) {
               return false;
            }
            delimiterMatched = true;
        } 
        return isRealRecursive(string, position+1, delimiterMatched);
    }

答案 3 :(得分:0)

  

有人可以给我一个如何做到这一点的提示吗?

从整个数字的现有递归匹配器开始,修改它并在另一种方法中使用它来匹配整数:

  ["+"|"-"]<whole-number>["."[<whole-number>]]

提示:您很可能需要更改现有方法以返回匹配的最后一个字符的索引,而不仅仅是true / false。想一想在整数结果中编码“不匹配”的最佳方法。