剑指offer:请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。

匿名 (未验证) 提交于 2019-12-02 22:56:40

题目描述:

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

分析:

1)0---9之间的数字

代码实现:

 import java.util.regex.Matcher; import java.util.regex.Pattern; public class Solution {    	 public boolean isNumeric(char[] str) { 		 String ss = String.valueOf(str); //		 先判断每个字符是否合法 		 int len = ss.length(); 		 for(int i=0; i<len; i++){ 			 char c = ss.charAt(i); 			 if(!((c>='0' && c <= '9') || c=='e' || c=='E' || c=='+' || c=='-'|| c=='.')){ 				 return false; 			 } 		 }// //		 正负号,E不能在末尾 		 if(ss.charAt(len-1) == '+' || ss.charAt(len-1) == '-' || ss.charAt(len-1) == 'E' || ss.charAt(len-1) == 'e'){ 			 return false; 		 } //		 判断小数点,只能有一个 		 if(ss.indexOf(".") != ss.lastIndexOf(".")){ 			 return false; 		 } //		 正负号在中间的位置时,前面的是e,E,后面是数字 		 for(int i=1; i<len-1; i++){ 			 char c = ss.charAt(i); 			 if(c == '+' || c=='-'){ 				 if(!(ss.charAt(i-1) == 'e' || ss.charAt(i-1) == 'E') || 						 !(ss.charAt(i+1)>='0' && ss.charAt(i+1)<='9')){ 					 return false; 				 } 			 } 		 }// //		e的后面不能有数字12E+4.3 		 for(int i=1; i<len; i++){ 			 char c = ss.charAt(i); 			 if(c == 'e' || c=='E'){ //				 if(i==len-1) return false; 				 if(ss.charAt(i+1) == '+' || ss.charAt(i+1) == '-'){ //					 从i+2开始往后没有小数点.则返回-1 					 if(ss.indexOf(".", i+2) != -1){ 						 return false; 					 } 				 } 			 } 		 }// 		 return true; 	 } }

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!