• 剑指Offer(Java版)第五十九题:请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。 例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。


    /*
    请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。
    例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。
    但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。
    */
    //一开始不知道这是什么意思,后来查了资料才知道是找规律的问题:
    //逐个字符进行判断,e或E、小数点或符号最多出现一次,而e或E的前一个必须是数字,且不能是第一个或最后一个字符,符号的前一个字符不能是e或E。
    public class Class59 {

    public boolean isNumeric(char[] str) {
    if(str == null || str.length <= 0){
    return false;
    }
    int symbol = 0; //'+'和'-'
    int eOrE = 0; //'e'和'E'
    int point = 0; //'.'
    if(str[0] == '-' || str[0] == '+'){
    symbol++;
    }
    for(int i = symbol; i < str.length; i++){
    if(str[i] == '-' || str[i] == '+'){
    if(str[i - 1] != 'e' && str[i - 1] != 'E'){
    return false;
    }
    continue;
    }
    if(str[i] == 'e' || str[i] == 'E'){
    eOrE++;
    if(eOrE > 1){
    return false;
    }
    if(i == 0 || str[i - 1] < 48 || str[i - 1] > 57 || i == str.length){
    return false;
    }
    point++;
    continue;
    }
    if(str[i] == '.'){
    point++; //除了数字、符号和'e'以及'E'之外,只剩下'.'了。
    if(point > 1){
    return false;
    }
    continue;
    }
    if((str[i] < 48 || str[i] > 57) && (str[i] != 'e') && (str[i] != 'E')){
    return false;
    }
    if(str[str.length - 1] == 'e' || str[str.length - 1] == 'E'){
    return false;
    }
    }
    return true;
    }

    public static void main(String[] args) {
    // TODO Auto-generated method stub

    }

    }

  • 相关阅读:
    中缀、后缀、前缀表达式
    Salesforce图片上传
    VSCode格式化Apex代码
    Reporting Services已有帐号出现无法登录的问题
    EF-查询缓存
    visual studio 2015将已有项目添加到码云(gitee)
    asp.net页面加载两次的坑
    EF的性能瓶颈
    微信JS-SDK上传多张照片
    Python20-Day02
  • 原文地址:https://www.cnblogs.com/zhuozige/p/12546857.html
Copyright © 2020-2023  润新知