JZ53:表示数值的字符串#
表示数值的字符串
http://www.nowcoder.com/practice/e69148f8528c4039ad89bb2546fd4ff8
解法1:正则表达式
import java.util.*; import java.util.regex.Pattern; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param str string字符串 * @return bool布尔型 */ public boolean isNumeric (String str) { // write code here // ^表示开头 $ 表示结尾 java中两个\\ 代表一个\ // * 零次或多次匹配前面的字符或子表达式 // ?零次或一次匹配前面的字符或子表达式 // + 一次或多次匹配前面的字符或子表达式 // [] 字符集。匹配包含的任一字符 // (:? )匹配 pattern 但不捕获该匹配的子表达式,即它是一个非捕获匹配 String p = "^[+-]?\\d*(?:\\.\\d*)?(?:[eE][+-]?\\d+)?$"; return Pattern.matches(p,str); } }
解法2:统计
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param str string字符串 * @return bool布尔型 */ public boolean isNumeric (String str) { // write code here if(str.length() == 1 && (str.charAt(0) > '9' || str.charAt(0) < '0')){ return false; } char[] ch=str.toCharArray(); if(ch.length==0 || ch==null){ return false; } int dotNum=0;//.的数量 int index=0;//索引位置 int eNum=0;//记录e的数量 int num=0;//记录数字的数量 if(ch[0]=='+' || ch[0]=='-'){ index++; } while(index<ch.length){ if(ch[index]>='0' && ch[index]<='9'){ index++; num=1; } else if(ch[index]=='.'){// e后面不能有.,e的个数不能大于1. if(dotNum>0 || eNum>0){ return false; } dotNum++; index++; } else if(ch[index]=='e' || ch[index]=='E'){// 重复e或者e前面没有数字 if(eNum>0 || num==0){ return false; } eNum++; index++; if(index<ch.length &&(ch[index]=='+'|| ch[index]=='-')){ index++; } if(index==ch.length){ return false; } } else{ return false; } } return true; } }
剑指Offer题解 文章被收录于专栏
剑指Offer-Java版本题解