正则表达式~

146 阅读1分钟

题目:表示数值的字符串

  • +100、5e2、-123、3.1416、0123都表示数字,12e、1a3.14、1.2.3、+-5、-1E-16、12e+5.4都不表示数值。
  • 思路:
  1. 使用java.util.regex.Pattern包下的Pattern.matches方法匹配表达式规则。
  2. "^...$"代表正则表达式的开头和结尾
  3. [-+]?代表+/-号可选,?表示出现0次或1次
  4. 每两个表达式之间要多加一个\来表示分割,所以\d其实等价于\d的功能,多余的一个\仅用于分隔位置
  5. \d*代表0个或多个[0-9]之间的数字
  6. \d+代表1个或多个[0-9]之间的数字
  7. (?:...)?表示非捕获型分组,功能类似于||,就是可以匹配这个表达式,也可以不匹配这个表达式
  • 本题正则表达式的规则:
  1. 首先是可选的+-号,出现0次或1次,[+-]?
  2. 数字之后才能加小数点,且小数点只能出现一次。一种是前面有数字,那就随便其后跟不跟小数点;如果前面没有数字,那么小数点之后必须要跟数字,不然会出现只有一个小数点的情况
  3. e/E只能出现一次,而且出现后不能跟带小数点的数字,只能跟正/负整数。
  • 代码:
class Solution {
    public boolean isNumber(String s) {
        //String pattern = "^[+-]?\\d*(?:\\.\\d*)?(?:\\[eE][+-]?\\d+)?$";
        
        String pattern1 = "^[+-]?((\\d+\\.?)|(\\d*\\.\\d+))([eE][+-]?\\d+)?$";
        return s.trim().matches(pattern1);
        
    }
}