解法1:正则表达式
import java.util.*;
import java.util.regex.Pattern;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param str string字符串
* @return bool布尔型
*/
public boolean isNumeric (String str) {
// write code here
// ^表示开头 $ 表示结尾 java中两个\\ 代表一个\
// * 零次或多次匹配前面的字符或子表达式
// ?零次或一次匹配前面的字符或子表达式
// + 一次或多次匹配前面的字符或子表达式
// [] 字符集。匹配包含的任一字符
// (:? )匹配 pattern 但不捕获该匹配的子表达式,即它是一个非捕获匹配
String p = "^[+-]?\\d*(?:\\.\\d*)?(?:[eE][+-]?\\d+)?$";
return Pattern.matches(p,str);
}
}
解法2:统计
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param str string字符串
* @return bool布尔型
*/
public boolean isNumeric (String str) {
// write code here
if(str.length() == 1 && (str.charAt(0) > '9' || str.charAt(0) < '0')){
return false;
}
char[] ch=str.toCharArray();
if(ch.length==0 || ch==null){
return false;
}
int dotNum=0;//.的数量
int index=0;//索引位置
int eNum=0;//记录e的数量
int num=0;//记录数字的数量
if(ch[0]=='+' || ch[0]=='-'){
index++;
}
while(index<ch.length){
if(ch[index]>='0' && ch[index]<='9'){
index++;
num=1;
}
else if(ch[index]=='.'){// e后面不能有.,e的个数不能大于1.
if(dotNum>0 || eNum>0){
return false;
}
dotNum++;
index++;
}
else if(ch[index]=='e' || ch[index]=='E'){// 重复e或者e前面没有数字
if(eNum>0 || num==0){
return false;
}
eNum++;
index++;
if(index<ch.length &&(ch[index]=='+'|| ch[index]=='-')){
index++;
}
if(index==ch.length){
return false;
}
}
else{
return false;
}
}
return true;
}
}