表示数值的字符串

本文介绍了一个用于判断字符串是否能表示数值(包括整数和小数)的算法实现。该算法通过状态机的方式检查字符串中每个字符的有效性,确保其符合数值表示规则,如1.23或-1E10等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package niuke;

public class NumberString {
    public static void main(String[] args) {
        System.out.println(isNumeric("1.2.3".toCharArray()));
    }
    
 public static boolean isNumeric(char[] str) {
    /* 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 
     但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。*/
        boolean flag = false;
        boolean flag1 = false;
        boolean flag2 = false;
        
       for(int i = 0 ; i < str.length ; i ++) {
           if( i == 0 ) {
               if(str[i] == '+' || str[i] == '-' || (str[i] >= 48 && str[i] <= 57) || str[i] == '.') {
                   continue;        //第一个字符不能出现e或者E
               }else {
                   return flag;       
               }
           }
           
           else if(str[i] == 'e' || str[i] == 'E') {
               if(!(str[i-1] >= 48 && str[i-1] <= 57)) {
                  return flag;    //e或者E前面必须是数字
               }
               if(i == str.length-1)
                   return flag;    //e不能是最后一个字符
               flag1 = true;
               continue;
            }
           
           else if(str[i] == '.') {
              
               if(flag1 || flag2) {  //只能又一个小数点,并且这个小数如果存在e要在e之前
                   return flag;
               }
               
               else if((str[i-1] >= 48 && str[i-1] <= 57) || str[i-1] == '+' || str[i-1] == '-') {
                   flag2 =true;        //小数点之前可以是数字或者加号或者减号
                   continue;
               }
               else if(i == str.length-1) {
                   return flag;      //小数点不能是最后一个字符
               }
                   
               flag2 =true;
               continue;
           }
        
           else if(str[i] == '+' || str[i] == '-') {
               if(str[i-1] == 'e' || str[i-1] == 'E') {
                   continue;      //此时这个加号或者减号已经不是第一个字符,所以必须再e之后
               }else {
                   return flag;
               }
           }
           
           else if((str[i] >= 48 && str[i] <= 57)) {
               continue;       //当是数字时就接着判定下一个
           }
           
           else {
               return flag;         //当不是数字,加号或者减号,或者e和小数点,则都是错误
           }
        
    }
       return true;
 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值