【追求进步】表示数值的字符串

题目描述

请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。
这个题目的思路就是一步一步需要都思维严谨的考虑周到:
1.边界的处理
2.指针遍历进行判断分层:遇到+或者-指针向前移动;-->到达了字符串末尾,则肯定不是数值;例如:+
将继续遍历接着判断是否有0-9的数字; -->
【如果未到字符串的末尾】-->
【如果是小数】则移动index。继续判断是否后面是0-9的数字;如果已经是字符串末尾则是数值;例如2.3
【如果是指数标识】-->
 判断【是否是科学计数法的结尾部分】,如E5,e5,E+5,e-5,e(E)后面接整数
3
// 【已经到了字符串的末尾了,说明其没有指数部分】<pre name="code" class="java" style="color: rgb(51, 51, 51);">    return true;
 
在线代码:
package TestMyselfe;

public class Test54 {
	 public static boolean isNumeric(char[] str) {
		if(str==null){
			return false;
		}
		int index=0;//遍历str的指针
		//如果开始遇到加号和减号则移动index指向的位置
		if(str[index]=='+'||str[index]=='-'){
			index++;
		}
		//已经到达字符串的末尾
		if(index >= str.length){
			return false;
		}
		boolean numeric=true;//字符串是否可以表示数值
		index=IsDigits(String.valueOf(str),index);//判断字符串剩下的是否是0-9的数字
		// 还未到字符串的末尾
        if (index < str.length) {
            // 【如果是小数点】
            if (str[index] == '.') {
                // 移动到下一个位置
                index++;
                index = IsDigits(String.valueOf(str), index);
                // (已经到了字符串的末尾了)
                if (index >= str.length) {
                    numeric = true;
                }
                // (还未到字符串结束位置)
                else if (index < str.length && (str[index] == 'e' || str[index] == 'E')) {
                    numeric = isExponential(String.valueOf(str), index);//如果遇到科学计数法表示
                } else {
                    numeric = false;
                }
            }
            //【 如果是指数标识】
            else if (str[index] == 'e' || str[index] == 'E') {
                numeric = isExponential(String.valueOf(str), index);
            } else {
                numeric = false;
            }
            return numeric;
        }
        // 【已经到了字符串的末尾了,说明其没有指数部分】
        else {
            return true;
        }
     }
	 //扫描字符串中的0-9的数位
	 public static int  IsDigits(String str,int index){
		 while(index < str.length()&&str.charAt(index)>='0'&&str.charAt(index)<='9'){
			 index++;
		 }
		 return index;
		}
	 /**
	     * 判断【是否是科学计数法的结尾部分】,如E5,e5,E+5,e-5,e(E)后面接整数
	     *
	     * @param string 字符串
	     * @param index  开始匹配的位置
	     * @return 匹配的结果
	     */
	 public static boolean isExponential(String str,int index){
		 //边界取舍
		 if(index>=str.length()||(str.charAt(index) != 'e' && str.charAt(index) != 'E')){
			 return false;
		 }
		 //移动到下一个要处理的阶段
		 index++;
		 //到达字符串末尾就返回false
		 if(index>=str.length()){
			 return false;
		 }
		 if(str.charAt(index)=='+'||str.charAt(index)=='-'){
			 index++;
		 }
		// 到达字符串的末尾,就返回false
	     if (index >= str.length()) {
	            return false;
	     }
	     index = IsDigits(str, index);//继续判断是否是0-9
	     
	        // 如果已经处理到了的数字的末尾就认为是正确的指数
	    return index >= str.length();
	 }
	 public static void main(String[] args) {
	      System.out.println(isNumeric("1.2.e1".toCharArray()));
	    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值