zoukankan      html  css  js  c++  java
  • Valid Number

    Validate if a given string is numeric.
    Some examples:
    "0" => true
    " 0.1 " => true
    "abc" => false
    "1 a" => false
    "2e10" => true
    Note: It is intended for the problem statement to be ambiguous. You should gather all requirements up front before implementing one.

    思路:

    这题我做的极其麻烦。但http://www.jiuzhang.com/solutions/valid-number/ 和http://www.cnblogs.com/yuzhangcmu/p/4060348.html的答案妙极啊。

    我抄在这里~背诵一遍。他们的思路是:

    首先我们看,能够出现的符号有:'e', 'E', '.' , '+', '-', '0 ~ 9'。 所以如果出现了别的东西,直接return false

    再者,这些符号出现的顺序是有讲究的。

    对于‘e’ 和 ‘E’:e的前后都要有数字,不会一e为开头或结尾;不可能出现两个e。

    对于‘.' :不可能在e后面出现,不会有两个‘.’。

    对于‘+/-’:只能出现在最开头或者紧跟‘e’。

    所以我们从头到尾读取,用三个flag表示这些符号的出现状态,思路就很清楚了!看代码吧

     1 public boolean isNumber(String s) {
     2         // Write your code here
     3         if (s == null) {
     4             return false;
     5         }
     6         String newS = s.trim();
     7         boolean num = false;
     8         boolean exp = false;
     9         boolean dot = false;
    10         for (int i = 0; i < newS.length(); i++) {
    11             if (newS.charAt(i) == 'e' || newS.charAt(i) == 'E') {
    12                 if (!num || exp) {
    13                     return false;
    14                 }else{
    15                     exp = true;
    16                     num = false;
    17                 }
    18             }else if(newS.charAt(i) == '.') {
    19                 if (exp || dot) {
    20                     return false;
    21                 }else{
    22                     dot = true;
    23                 }
    24             }else if(newS.charAt(i) == '+' || newS.charAt(i) == '-') {
    25                 if (i != 0 && newS.charAt(i - 1) != 'e' && newS.charAt(i - 1) != 'E') {
    26                     return false;
    27                 }
    28             }else if(newS.charAt(i) >= '0' && newS.charAt(i) <= '9') {
    29                 num = true;
    30             }else{
    31                 return false;
    32             }
    33         }
    34         return num;
    35     }
  • 相关阅读:
    使用 connect http proxy 绕过 ssh 防火墙限制
    Docker 容器与宿主机网段冲突导致网络无法 ping 通的解决方案
    Mac 下 Chrome 浏览器 ERR_NETWORK_CHANGED 报错解决方案
    SCSS & SASS Color 颜色函数用法
    eggjs 框架代理调试 SELF_SIGNED_CERT_IN_CHAIN 报错解决方案
    【转】谷歌安装Axure浏览器插件
    js 图片转base64并压缩
    ajax请求
    postman如何重置账号的密码
    解决url中&times会被转成×的问题
  • 原文地址:https://www.cnblogs.com/gonuts/p/4543090.html
Copyright © 2011-2022 走看看