剑指offer——表示数值的字符串以及常用正则表达式的应用

题目描述:请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字串"+100",“5e2”,"-123",“3.1416"和”-1E-16"都表示数值。 但是"12e",“1a3.14”,“1.2.3”,"±5"和"12e+4.3"都不是。

解题思路:

  1. 利用java内置API进行判断,利用将字符串解析为制定类型的变量。
  2. 利用正则表达式进行判断

方法一:使用double浮点型的包装类Double中的方法,如:parseDouble、valueOf方法。使用方法校验,失败抛异常,在catch中去处理异常,返回false即可。

代码如下:

private static boolean isNumeric(char[] str) {
		String string = new String(str);
		System.out.println(string);
		try {
			Double.parseDouble(string);//parseDouble、valueOf任意一个就好。
			Double.valueOf(string);
		} catch (Exception e) {
			return false;
		}
		return true;
	}

parseDouble方法与valueOf方法的差异:parseDouble方法的返回值类型为基础类型double,而valueOf函数返回值类型为Double对象,valueOf源码也是调用的parseDouble.
在这里插入图片描述

顺便带大家回顾一下包装类的有关知识吧。

  1. 有哪些常见的包装类?
基础类型包装类
byteByte
shortShort
intInteger
longLong
charChar
doubleDouble
floatFloat
booleanBoolean
  1. 自动装箱与自动拆箱。
    基础类型都有其对应的包装类。
转换方式转换命名
基础类型---------->包装类型装箱
包装类对象---------->基础类型拆箱
  1. 包装类中常用的方法有哪些呢?
    包装类中最常用的就是包装类对象与String字符串的转换。常见的方法如下表所示:
常用方法备注
public static double parseDouble(String s)返回一个新的 double初始化为指定的 String所代表的值,通过类的方法进行 Double valueOf。
public static Double valueOf(double d)返回表示指定的 double价值 Double实例。
public static String toHexString(double d)返回的 double类型的数的一个十六进制字符串表示形式
public String toString()返回该对象的字符串表示 Double。

方法二:直接使用String对象的matches方法,利用正则表达式进行判断。

	/**  
	 * @Description: TODO(
		  [\\+\\-]?                    正或负符号出现与否
	      \\d*                         整数部分是否出现,如-.34 或 +3.34均符合
	      (\\.\\d+)?                   如果出现小数点,那么小数点后面必须有数字;否则一起不出现
	      ([eE][\\+\\-]?\\d+)?         如果存在指数部分,那么e或E肯定出现,+或-可以不出现,紧接着必须跟着整数;或者整个部分都不出现
      )
	 * @param str
	 * @return
	 * @author Mr.Wang
	 * @date 2020-07-05 12:18:18 
	 */  
	private static boolean isNumeric2(char[] str) {
		 return new String(str).matches("[\\+\\-]?\\d*(\\.\\d+)?([eE][\\+\\-]?\\d+)?");
	}

这里对于正则表达式比较熟悉的同学对于这种方法可以说是小菜一碟,正则表达式的方便也不是一点两点,熟练使用正则表达式可以为编码节省大量的时间,下面跟大家一起学习一下正则表达式常用的表达方式吧。

表达式匹配字符举例
\r, \n回车、换行符
\\表示\本身(特殊符号前加\表示符号本身)\.表示小数点本身
$与字符串结束的地方匹配,不匹配任何字符表达式 “aaa$” 在匹配 “xxx aaa xxx” 时,匹配结果是:失败。因为 “$” 要求与字符串结束的地方匹配,因此,只有当 “aaa” 位于字符串的结尾的时候,“aaa$” 才能匹配,比如:“xxx xxx aaa”。
^与字符串开始的地方匹配,不匹配任何字符表达式 “^aaa” 在匹配 “xxx aaa xxx” 时,匹配结果是:失败。因为 “^” 要求与字符串开始的地方匹配,因此,只有当 “aaa” 位于字符串的开头的时候,"^aaa" 才能匹配,比如:“aaa xxx xxx”。
*表达式不出现或出现任意次,相当于 {0,}比如:"^*b"可以匹配 “b”,"^^^b"
?匹配表达式0次或者1次,相当于 {0,1}比如:"a[cd]?"可以匹配 “a”,“ac”,“ad”
+表达式至少出现1次,相当于 {1,}比如:"a+b"可以匹配 “ab”,“aab”,“aaab”
{n}表达式重复n次比如:"\w{2}" 相当于 “\w\w”;“a{5}” 相当于 “aaaaa”
{m,n}表达式至少重复m次,最多重复n次比如:"ba{1,3}"可以匹配 “ba"或"baa"或"baaa”
{m,}表达式至少重复m次比如:"\w\d{2,}“可以匹配 “a12”,”_456",“M12344”
[ab5@]匹配 “a” 或 “b” 或 “5” 或 “@”比如:abc可以匹配到a、b
[^abc]匹配 “a”,“b”,“c” 之外的任意一个字符比如:“adef”可以匹配到d、e、f
[f-k]匹配 “f”~“k” 之间的任意一个字母比如:“adef”可以匹配到f
[^A-F0-3]匹配 “A”“F”,"0"“3” 之外的任意一个字符比如:“a345”可以匹配到a、4、5
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值