zoukankan      html  css  js  c++  java
  • 54、表示数值的字符串

    1、

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


    例子说明

      例如,字符串“+100”,“5e2”,“-123”,“3.1416”及”-1E-16”都表示数值,但“12e”,”1a3.14”,”1.2.3”,”+-5”及“12e+5.4”都不是。 
      

    解题思路

      在数值之前可能有一个表示正负的’-‘或者’+’。接下来是若干个0到9的数位表示数值的整数部分(在某些小数里可能没有数值的整数部分)。如果数值是一个小数,那么在小数点后面可能会有若干个0到9的数位表示数值的小数部分。如果数值用科学计数法表示,接下来是一个’e’或者‘E’,以及紧跟着的一个整数(可以有正负号)表示指数。 
      判断一个字符串是否符合上述模式时,首先看第一个字符是不是正负号。如果是,在字符串上移动一个字符,继续扫描剩余的字符串中0到9的数位。如果是一个小数,则将遇到小数点。另外,如果是用科学计数法表示的数值,在整数或者小数的后面还有可能遇到’e’或者’E’。

    
    

    package bishi;
    public class isNumeric {

    public static boolean isNumeric(char[] str) {

    
    

    /**
    **思路:1、可能是正负号
    **2、然后是可能是整数,整数有多少位
    *3、有“.”是小数,后面接整数,整数有n位
    *4、可能有e或E,后面可接+-,然后是若干位整数
    */

    if(str == null || str.length == 0) {
    return false;
    }
    int i = 0;
    //判断正负号
    if(str[0] == '+' || str[0] == '-'){
    i++;
    }
    //是否只有正负号
    if(i == str.length){
    return false;
    }
    //判断是否为整数及整数个数
    boolean isNumeric = true;
    i = isNumber(str, i);

    if(i < str.length){
    //如果是小数
    if(str[i] == '.'){//1、是小数

    i++;
    i = isNumber(str, i);
    //到达末尾
    if(i >= str.length){
    return true;
    } else if(i < str.length &&(str[i] == 'e' || str[i] == 'E')){
    //没到末尾
    isNumeric = isExp(str, i);
    } else {
    isNumeric = false;
    }
    } else if (str[i] == 'e' || str[i] == 'E'){//指数标识
    isNumeric = isExp(str, i);
    } else{//都不是
    isNumeric = false;
    }
    //如果是指数标识
    return isNumeric;

    } else{//到了末尾,没有别的什么,只有整数
    return true;
    }

    
    

    }

    
    

    private static boolean isExp(char[] str, int i) {
    // TODO Auto-generated method stub
    if(i >= str.length || (str[i] != 'e' && str[i] != 'E')){
    return false;
    }
    i++;
    //到达末尾
    if(i >= str.length){
    return false;
    }
    //可能有+-
    if(str[i] == '+' || str[i] == '-'){
    i++;
    }
    //只有+-
    if(i >= str.length){
    return false;
    }
    //可能有数字
    i = isNumber(str, i);
    if(i == str.length){
    return true;
    } else {
    return false;
    }

    }

    
    

    private static int isNumber(char[] str, int i) {
    // TODO Auto-generated method stub
    while(i < str.length && str[i] >= '0' && str[i] <='9' ){
    i++;
    }
    return i;
    }

    public static void main(String[] args) {
    System.out.println(isNumeric("100".toCharArray()) + "[" + true + "]");
    System.out.println(isNumeric("123.45e+6".toCharArray()) + "[" + true + "]");
    System.out.println(isNumeric("+500".toCharArray()) + "[" + true + "]");
    System.out.println(isNumeric("5e2".toCharArray()) + "[" + true + "]");
    System.out.println(isNumeric("3.1416".toCharArray()) + "[" + true + "]");
    System.out.println(isNumeric("600.".toCharArray()) + "[" + true + "]");
    System.out.println(isNumeric("-.123".toCharArray()) + "[" + true + "]");
    System.out.println(isNumeric("-1E-16".toCharArray()) + "[" + true + "]");
    System.out.println(isNumeric("100".toCharArray()) + "[" + true + "]");
    System.out.println(isNumeric("1.79769313486232E+308".toCharArray()) + "[" + true + "]");
    System.out.println();

    
    

    System.out.println(isNumeric("12e".toCharArray()) + "[" + false + "]");
    System.out.println(isNumeric("1a3.14".toCharArray()) + "[" + false + "]");
    System.out.println(isNumeric("1+23".toCharArray()) + "[" + false + "]");
    System.out.println(isNumeric("1.2.3".toCharArray()) + "[" + false + "]");
    System.out.println(isNumeric("+-5".toCharArray()) + "[" + false + "]");
    System.out.println(isNumeric("12e+5.4".toCharArray()) + "[" + false + "]");
    }

    
    



    }


    http://blog.csdn.net/derrantcm/article/details/46825671
  • 相关阅读:
    为什么大多数IOC容器使用ApplicationContext,而不用BeanFactory
    重温Java泛型,带你更深入地理解它,更好的使用它!
    看完了这篇,面试的时候人人都能单手撸冒泡排序!
    JAVA基础4---序列化和反序列化深入整理(Hessian序列化)
    VS Code 变身小霸王游戏机!
    equals()方法和hashCode()方法详解
    openFeign远程调用时使用Mybatis-plus的IPage接口进行返回分页数据失败的记录
    通过express快速搭建一个node服务
    UML 类图
    jdk命令行工具系列——检视阅读
  • 原文地址:https://www.cnblogs.com/lingli-meng/p/7482486.html
Copyright © 2011-2022 走看看