我试图验证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函数。
答案 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。想一想在整数结果中编码“不匹配”的最佳方法。