验证字符串是否匹配实数

Verify if String matches real number

我正在尝试验证字符串 match/is 是否为实数。为此,我创建了这个方法:

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 函数。

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

^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$
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;
}

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

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);
    }

Can anybody give me a tip on how to do this?

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

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

提示:您很可能需要将现有方法更改为 return 最后匹配的字符的索引,而不仅仅是真/假。想出在整数结果中编码 "no match" 的最佳方法。