有效数字(按顺序)可以分成以下几个部分: 一个 小数 或者 整数 (可选)一个 'e' 或 'E' ,后面跟着一个 整数 小数(按顺序)可以分成以下几个部分: (可选)一个符号字符('+' 或 '-') 下述格式之一: 至少一位数字,后面跟着一个点 '.' 至少一位数字,后面跟着一个点 '.' ,后面再跟着至少一位数字 一个点 '.' ,后面跟着至少一位数字 整数(按顺序)可以分成以下几个部分: (可选)一个符号字符('+' 或 '-') 至少一位数字 部分有效数字列举如下:["2", "0089", "-0.1", "+3.14", "4.", "-.9", "2e10", "-90E3", "3e+7", "+6e-1", "53.5e93", "-123.456e789"] 部分无效数字列举如下:["abc", "1a", "1e", "e3", "99e2.5", "--6", "-+3", "95a54e53"] 给你一个字符串 s ,如果 s 是一个 有效数字 ,请返回 true 。 (请用java代码展示)
时间: 2023-02-25 10:47:25 浏览: 133
从一亿个数里找出最大的一万个数
5星 · 资源好评率100%
有效数字判断代码如下:
```
class Solution {
public boolean isNumber(String s) {
s = s.trim();
boolean pointSeen = false;
boolean eSeen = false;
boolean numberSeen = false;
boolean numberAfterE = true;
for(int i=0; i<s.length(); i++) {
char c = s.charAt(i);
if('0' <= c && c <= '9') {
numberSeen = true;
numberAfterE = true;
} else if(c == '.') {
if(eSeen || pointSeen) {
return false;
}
pointSeen = true;
} else if(c == 'e' || c == 'E') {
if(eSeen || !numberSeen) {
return false;
}
numberAfterE = false;
eSeen = true;
} else if(c == '-' || c == '+') {
if(i != 0 && s.charAt(i-1) != 'e' && s.charAt(i-1) != 'E') {
return false;
}
} else {
return false;
}
}
return numberSeen && numberAfterE;
}
}
```
这段代码的思路是:遍历字符串中的每一个字符,如果是数字,则标记为已经看到数字并且当前位置是在'e'之后。如果是'.',则判断是否已经看到'e'或者'.',如果是则返回false。如果是'e'或者'E',则判断是否已经看到'e'或者是否有数字,如果是则返回false。如果是符号位'-'或者'+',则判断是否在第一个位置或者在'e'或者'E'的后面,否则返回false。如果是其他字符,则直接返回false。最后判断是否有数字且当前位置在'e'之后,如果是则返回true。
阅读全文