剣指offerno 53.数値を表す文字列(Java)


タイトルの説明:
文字列が整数および小数を含む値を表すかどうかを判断する関数を実装してください.たとえば、文字列「+100」、「5 e 2」、「-123」、「3.1416」および「-1 E-16」は数値を表します.ただし、「12 e」、「1 a 3.14」、「1.2.3」、「+-5」および「12 e+4.3」はすべてではありません.
考え方:
数値を表す文字列はパターンA[.[B]][e|E[C]]に従う
最も複雑な「+123.123 e+123」
  • は、まず正負の符号の有無を決定し、整数であるか否かを判断し、数字以外の文字である場合に小数点であるか又は指数であるか否かを判断するe
  • である.
  • 指数のe Eであれば正負符号と整数があるか否かを再判断する.

  • コード:
    package offer01;
    
    public class TestNo53 {
        public static void main(String[] args) {
            char[] a = {'1','2','3','.','1','2','3','e','+','1','2','3'};
            System.out.println(new TestNo53().isNumeric(a));
        }
    
        public boolean isNumeric(char[] str) {
            //      
            if(str == null){
                return false;
            }
            int index = 0;//  +-
            int encount = 0;//  e
            int point = 0;//   
            // + -             e  
            if(str[0] == '-' || str[0] == '+')
                index++;
            for(int i = index;i1)
                        return false;
                    if(i==0 || i==str.length-1)
                        return false;
                    if(str[i-1] > 57 || str[i-1] <48)
                        return false;
                    point++;
                    continue;
                }
                //.         ,,        。         ,
                if(str[i] == '.'){
                    if(i==str.length-1)
                        return false;
                    point++;
                    if(point >1)
                        return false;
                    continue;
                }
                //         ,           
                if(str[i] >57 || str[i] <48)
                    return false;
            }
            return true;
        }
    }
    

     
     
    目が覚めてやさしく進退を知って努力して向上して優秀です..