lifeiteng

65. Valid Number

Jan 8th, 2019
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.71 KB | None | 0 0
  1. class Solution {
  2.     public boolean isNumber(String s) {
  3.         if(s == null) return false;
  4.         s = s.trim();
  5.         if(s.length() < 1) return false;
  6.         for(char ch : s.toCharArray())
  7.         {
  8.             if(Character.isDigit(ch) || ch == '.' || ch == 'e' || ch == '+' || ch == '-') continue;
  9.             return false;   // invalid for any other characters
  10.         }
  11.         // now try to separate s into two parts
  12.         int pos = s.indexOf('e');
  13.         if(pos < 0) return parseD(s) || parseI(s);
  14.         String sub1 = s.substring(0, pos), sub2 = s.substring(pos + 1);
  15.         int l1 = sub1.length(), l2 = sub2.length();
  16.         if(l1 < 1 || l2 < 1) return false;
  17.         return (parseD(sub1) || parseI(sub1)) && parseI(sub2);
  18.     }
  19.    
  20.     boolean parseD(String s)
  21.     {
  22.         int pos = s.indexOf('.');
  23.         if(pos < 0)
  24.         {
  25.             return parseI(s);
  26.         }
  27.         // has dot
  28.         /*
  29.         possible forms
  30.         [sign] #.#
  31.         [] #.EMPTY
  32.         []EMPTY.#
  33.         */
  34.         String sub1 = s.substring(0, pos), sub2 = s.substring(pos + 1);
  35.         int l1 = sub1.length(), l2 = sub2.length();
  36.         if(l1 < 1 && l2 < 1) return false;  // EMPTY.EMPTY
  37.         if(l2 < 1) return parseI(sub1); // [sign]#.EMPTY
  38.         return sub1.matches("[+|-]?[\\d]*") && parseI0(sub2);    // [sign]Empty.#
  39.     }
  40.    
  41.     boolean parseI(String s)
  42.     {
  43.         // if(s.length() < 1) return true;
  44.         if(s.charAt(0) == '+' || s.charAt(0) == '-') s = s.substring(1);
  45.         return parseI0(s);
  46.     }
  47.    
  48.     boolean parseI0(String s)
  49.     {
  50.         // System.out.println(s);
  51.         // System.out.println(s.matches("\\d+"));
  52.         return s.matches("\\d+");
  53.     }
  54. }
Advertisement
Add Comment
Please, Sign In to add comment