• 剑指offer系列27--表示数值的字符串


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

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

     1 package com.exe6.offer;
     2 /**【题目】
     3  * 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。
     4  * 例如,字符串”+100”,”5e2”,”-123”,”3.1416”和”-1E-16”都表示数值。
     5  *  但是”12e”,”1a3.14”,”1.2.3”,”+-5”和”12e+4.3”都不是。
     6  * @author WGS
     7  *
     8  */
     9 public class IsString {
    10     int index=0;
    11     public boolean isString(char[] str){
    12         if(str==null || str.length<=0) return false;
    13         
    14         int len=str.length;
    15         
    16         //0 去除首尾空格
    17         while(str[index]==' ')
    18             index++;
    19         if(index>=len) return false;
    20         while(str[len-1]==' ')
    21             len--;
    22         if(len<=0) return false;
    23         
    24         //1 判断是否正负号
    25         if(str[index]=='+' || str[index]=='-')
    26             index++;
    27         if(index>=len) return false;
    28         //2 判断正负号后的整数 是整数就直接跳过,不是在整数则跳到下一步;
    29         scanDigits(str,index);
    30         if(index==len) return true;
    31         int index2=0;
    32         
    33         //3 判断小数点后是否满足
    34         if(str[index]=='.'){
    35             index++;
    36             if(index==len) return true;
    37             index2 = index;
    38             scanDigits(str,index);
    39             
    40             if(index==index2) return false;//说明index没变,.后数不满足整数条件
    41             if(index==len) return true;
    42         }
    43         //4 判断科学计数法
    44         if(str[index]=='e'||str[index]=='E'){
    45             index++;
    46             if(index==len) 
    47                 return false;        
    48             if(str[index]=='+' || str[index]=='-')
    49                 index++;
    50             index2=index;
    51             scanDigits(str,index);
    52             if(index==index2) return false;//说明index没变,.后数不满足整数条件
    53             if(index==len) return true;
    54         }
    55         
    56         return false;
    57         
    58     }
    59     private void scanDigits(char[] str, int i) {
    60         while(i<str.length &&str[i]<='9' && str[i]>='0'){
    61             i++;
    62             index++;
    63         }        
    64     }
    65 
    66     public static void main(String[] args) {
    67             String s = "24.44";
    68             boolean b = new IsString().isString(s.toCharArray());
    69             System.out.println(b);
    70     }
    71 
    72 }
  • 相关阅读:
    bzoj 2337 [HNOI2011]XOR和路径【高斯消元+dp】
    bzoj 3196 Tyvj 1730 二逼平衡树【线段树 套 splay】
    bzoj 3528 [Zjoi2014]星系调查【树链剖分+数学】
    bzoj 2127 happiness【最小割+dinic】
    bzoj 3110 [Zjoi2013]K大数查询【树套树||整体二分】
    bzoj 4137 [FJOI2015]火星商店问题【CDQ分治+可持久化trie】
    运用背景橡皮擦抠透明郁金香
    使用快速通道抠荷花
    抠图总结
    花纹的选区
  • 原文地址:https://www.cnblogs.com/noaman/p/5547895.html
Copyright © 2020-2023  润新知