表示数值的字符串
来源:互联网 发布:dvd自动播放软件 编辑:程序博客网 时间:2024/06/07 06:22
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串”+100”,”5e2”,”-123”,”3.1416”和”-1E-16”都表示数值。 但是”12e”,”1a3.14”,”1.2.3”,”+-5”和”12e+4.3”都不是。
//强大的正则表达式,已经把我下面的那种解法虐了public class Solution { public static boolean isNumeric(char[] str) { String string = String.valueOf(str); return string.matches("[\\+-]?[0-9]*(\\.[0-9]*)?([eE][\\+-]?[0-9]+)?"); }}
public class Solution { /**分两种情况, * 1.第一种是第一个字符是数字,继续判断(****) 2.第二种第一个不是数字,那么分为以下两种 (1).第一个是'+'或者'-'; 继续判断(****),那从第二个字符开始的后面的字符串与1判断一样 (2).第一个不是的话,就不是数值 */ public static boolean isNumeric(char[] str) { boolean flag = true; boolean flagEafter = false;//防止123.45e+6中e后面的+因为不是属于e或者E的非法字符被干掉*** int numdecimal = 0; if (isDigit(str[0])) {//1.第一个字符是数字 for (int i = 1; i < str.length; i++) { if (numdecimal > 1) {//如果'.'数目大于1 flag = false; break; } if (!isDigit(str[i])) {//如果不是数字 if (str[i]=='.') numdecimal++; else if (str[i]=='e'||str[i]=='E') {//如果当前字符是e,E,那么后面的数字必须全是整数,否则就是false if (i==str.length-1) {//如果是e或者E但是,e或者E作为最后一个字符 flag = false; break; } else if (str[i+1]=='-'||str[i+1]=='+') {//如果出现了-或者+号,但是前面的字符不是e,或者E if ((i+1) == str.length-1) {//比如"4e-"这种情况 flag = false; break; } else { int j = i+2; for (j = i+2; j < str.length; j++) { if (!isDigit(str[j])) { flag = false; break; } } if (j==str.length) flagEafter = true; } } else {//排除4e3.12这种的 int j = i+1; for (j = i+1; j < str.length; j++) { if (!isDigit(str[j])) { flag = false; break; } } if (j==str.length) flagEafter = true; } } else {//如果在e,E之前有除了-,+的其他字符 flag = false; break; } } } if (flagEafter) flag = true; } else {//2.如果第一个不是数字 if (str[0]=='-'||str[0]=='+') { for (int i = 1; i < str.length; i++) { if (numdecimal > 1) {//如果'.'数目大于1 flag = false; break; } if (!isDigit(str[i])) { if (str[i]=='.') numdecimal++; else if (str[i]=='e'||str[i]=='E') { if (i==1||i==str.length-1) {//如果是e或者E但是,e或者E作为最后一个字符 flag = false; break; } else if (str[i+1]=='-'||str[i+1]=='+') {//如果出现了-或者+号,但是前面的字符不是e,或者E if ((i+1) == str.length-1) {//比如"4e-"这种情况 flag = false; break; } else {// int j = i+2; for (j = i+2; j < str.length; j++) { if (!isDigit(str[j])) { flag = false; break; } } if (j == str.length) flagEafter = true; } } else { int j = i+1; for (j = i+1; j < str.length; j++) { if (!isDigit(str[j])) { flag = false; break; } } if (j == str.length) flagEafter = true; } } else {//如果在e,E之前有除了-,+的其他字符 flag = false; break; } } } if (flagEafter) flag = true; } else { flag = false; } } return flag; } public static boolean isDigit(char ch) { if (ch>='0'&&ch<='9') return true; return false; }}
阅读全文
0 0
- 表示数值的字符串
- 表示数值的字符串
- 表示数值的字符串
- 表示数值的字符串
- 表示数值的字符串
- 表示数值的字符串
- 表示数值的字符串
- 表示数值的字符串
- 表示数值的字符串
- 表示数值的字符串
- 表示数值的字符串
- 表示数值的字符串
- 表示数值的字符串
- 表示数值的字符串
- 表示数值的字符串
- 表示数值的字符串
- 表示数值的字符串
- 表示数值的字符串
- Image Is Everything UVALive
- 面向对象总结篇
- 关于oracle重复数据合并以及.前面加0问题的解决
- 电阻抗断层成像开源软件eidors3.8的入门使用方法
- NOIP模拟9.28
- 表示数值的字符串
- Struts2 流程详解
- C++异常处理
- 数组
- 动画(Animation)来回变换
- java语言编写链表的基本操作(链表的创建,插入,删除,打印,排序)
- jedis选择redis的某个数据库
- 双大于运算法则
- 第二十七节JSP