表示数值的字符串

网友投稿 851 2022-09-08

表示数值的字符串

表示数值的字符串

请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串”+100”,”5e2”,”-123”,”3.1416”和”-1E-16”都表示数值。 但是”12e”,”1a3.14”,”1.2.3”,”+-5”和”12e+4.3”都不是。

第一种解法

/*以下对正则进行解释:[\\+\\-]? -> 正或负符号出现与否\\d* -> 整数部分是否出现,如-.34 或 +3.34均符合(\\.\\d+)? -> 如果出现小数点,那么小数点后面必须有数字; 否则一起不出现([eE][\\+\\-]?\\d+)? -> 如果存在指数部分,那么e或E肯定出现,+或-可以不出现, 紧接着必须跟着整数;或者整个部分都不出现*/package HWday05;public class HW05 { public boolean isNumeric(char[] str) { String string = String.valueOf(str) ; return string.matches("[\\+\\-]?\\d*(\\.\\d+)?([eE][\\+\\-]?\\d+)?"); }}

第二种解法

public class Solution public boolean isNumeric(char[] str) { // 过滤特殊情况 if(str == null || str.length == 0) return false; // 这里注意几个细节 // 1、特殊字符可以是+-.eE,其中+-.可以出现在开头 // 2、.在数字中只能出现一次 // 3、+-可以在eE后面再出现一次 // 4、e只能在数字或.的后面出现 // 5、e不能出现在末尾 // 6、不能只出现+-或者. // 7、不能出现上述的几个特殊字符意外的字符 int start = 0; boolean dot = false, sign = false, hasE = false; if(!Character.isDigit(str[0])){ if(str[0] == '+' || str[0] =='-'){ sign = true; start++; }else if(str[0] == '.'){ dot = true; start++; }else return false; } if(start == str.length - 1) return false; for(int i = start; i < str.length; i++){ if(Character.isDigit(str[i])) continue; else if(str[i] == '+' || str[i] == '-'){ if(sign) return false; else if(str[i - 1] == 'E' || str[i - 1] == 'e') sign = true; else return false; }else if(str[i] == '.'){ if(dot) return false; dot = true; }else if(str[i] == 'e' || str[i] == 'E'){ if(hasE || i == str.length - 1) return false; else if(str[i - 1] == '.' || Character.isDigit(str[i - 1])){ hasE = true; sign = false; dot = true; }else return false; }else return false; } return true; }}

第三种解法

public class Solution { boolean isNumeric(char[] s) { if(s.length==0) return false; if((s.length==1)&&(s[0]<'0'||s[0]>'9')) return false; if(s[0]=='+'||s[0]=='-'){ if(s.length==2&&(s[1]=='.')) return false; }else if((s[0]<'0'||s[0]>'9')&&s[0]!='.') return false;//首位既不是符号也不是数字还不是小数点,当然是false int i = 1; while((i='0'&&s[i]<='9')) i++; if(i=s.length) return false; while((i='0'&&s[i]<='9')) i++; } if(i='0'&&s[i]<='9')) i++; else return false; }else if(i='0'&&s[i]<='9')) i++; }else return false; } if(i

第四种解法、

public boolean solution(char[] str){ //排除特殊情况 if(str == null || str.length ==1 ) return false; char pre = ' '; int dotNum = 0; int eNum = 0; for(int i = 0; i= 48 && c<=57); } private boolean isSign(char c){ return (c=='-' || c=='+'); } private boolean isE(char c) { return (c == 'e' || c== 'E'); } private boolean isDot(char c){ return c=='.'; }

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Python矩阵相关计算(求整个矩阵的平方根、求矩阵中每一个数的平方根)
下一篇:「运维有小邓」用于云应用程序的ADSelfService Plus多重身份验证
相关文章

 发表评论

暂时没有评论,来抢沙发吧~