java怎么判斷變量是否為數(shù)字?針對(duì)這個(gè)問題,這篇文章給出了相對(duì)應(yīng)的分析和解答,希望能幫助更多想解決這個(gè)問題的朋友找到更加簡(jiǎn)單易行的辦法。
創(chuàng)新互聯(lián)是專業(yè)的歙縣網(wǎng)站建設(shè)公司,歙縣接單;提供成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì),網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行歙縣網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!
1、用JAVA自帶的函數(shù)
public static boolean isNumeric(String str){ for (int i = 0; i < str.length(); i++){ System.out.println(str.charAt(i)); if (!Character.isDigit(str.charAt(i))){ return false; } } return true; }
2、用正則表達(dá)式
首先要import java.util.regex.Pattern 和 java.util.regex.Matcher
public boolean isNumeric(String str){ Pattern pattern = Pattern.compile("[0-9]*"); Matcher isNum = pattern.matcher(str); if( !isNum.matches() ){ return false; } return true; }
3、使用org.apache.commons.lang
org.apache.commons.lang.StringUtils; boolean isNunicodeDigits=StringUtils.isNumeric("aaa123456789"); http://jakarta.apache.org/commons/lang/api-release/index.html下面的解釋: isNumeric public static boolean isNumeric(String str)Checks if the String contains only unicode digits. A decimal point is not a unicode digit and returns false. null will return false. An empty String ("") will return true. StringUtils.isNumeric(null) = false StringUtils.isNumeric("") = true StringUtils.isNumeric(" ") = false StringUtils.isNumeric("123") = true StringUtils.isNumeric("12 3") = false StringUtils.isNumeric("ab2c") = false StringUtils.isNumeric("12-3") = false StringUtils.isNumeric("12.3") = false
Parameters: str - the String to check, may be null Returns: true if only contains digits, and is non-null
上面三種方式中,第二種方式比較靈活。
第一、三種方式只能校驗(yàn)不含負(fù)號(hào)“-”的數(shù)字,即輸入一個(gè)負(fù)數(shù)-199,輸出結(jié)果將是false;
而第二方式則可以通過修改正則表達(dá)式實(shí)現(xiàn)校驗(yàn)負(fù)數(shù),將正則表達(dá)式修改為“^-?[0-9]+”即可,修改為“-?[0-9]+.?[0-9]+”即可匹配所有數(shù)字。
如果我輸入的是"a“,它能識(shí)別出來這個(gè)不是數(shù)字,該怎么寫?
import java.io.* ; import java.util.* ; public class Test{ public static void main(String [] args) throws Exception{ System.out.println("請(qǐng)輸入數(shù)字:"); BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); String line=br.readLine(); if(line.matches("\\d+")) //正則表達(dá)式 詳細(xì)見java.util.regex 類 Pattern System.out.println("數(shù)字"); else System.out.println("非數(shù)字"); } }
("\d")是數(shù)字0-9 ("\\d+")是什么意思?
正則表達(dá)式用兩個(gè)斜杠表示一個(gè)斜杠,后面跟著一個(gè)加號(hào)表示出現(xiàn)一次或多次,完整的意思就是整個(gè)字符串中僅包含一個(gè)或多個(gè)數(shù)字。
4、判斷ASCII碼值
public static boolean isNumeric0(String str){ for(int i=str.length();--i>=0;){ int chr=str.charAt(i); if(chr<48 || chr>57) return false; } return true; }
5、逐個(gè)判斷str中的字符是否是0-9
public static boolean isNumeric3(String str){ final String number = "0123456789"; for(int i = 0;i if(number.indexOf(str.charAt(i)) == -1){ return false; } } return true; }
6、捕獲NumberFormatException異常
public static boolean isNumeric00(String str){ try{ Integer.parseInt(str); return true; }catch(NumberFormatException e){ System.out.println("異常:\"" + str + "\"不是數(shù)字/整數(shù)..."); return false; } }
ps:不提倡使用方法6,原因如下:
1、NumberFormatException是用來處理異常的,最好不要用來控制流程的。
2、雖然捕捉一次異常很容易,但是創(chuàng)建一次異常會(huì)消耗很多的系統(tǒng)資源,因?yàn)樗o整個(gè)結(jié)構(gòu)作一個(gè)快照。
看一下JDK源碼:
public static long parseLong(String s,int radix) throws NumberFormatException { if(s == null){ throw new NumberFormatException("null"); } if(radix < Character.MIN_RADIX){ throw new NumberFormatException("radix " + radix + " less than Character.MIN_RADIX"); } if(radix > Character.MAX_RADIX){ throw new NumberFormatException("radix " + radix + " greater than Character.MAX_RADIX"); } long result = 0; boolean negative = false; int i = 0,max = s.length(); long limit; long multmin; int digit; if(max > 0){ if(s.charAt(0) == '-'){ negative = true; limit = Long.MIN_VALUE; i++; }else{ limit = -Long.MAX_VALUE; } multmin = limit / radix; if(i < max){ digit = Character.digit(s.charAt(i++),radix); if(digit < 0){ throw new NumberFormatException(s); }else{ result = -digit; } } while(i < max){ // Accumulating negatively avoids surprises near MAX_VALUE digit = Character.digit(s.charAt(i++),radix); if(digit < 0){ throw new NumberFormatException(s); } if(result < multmin){ throw new NumberFormatException(s); } result *= radix; if(result < limit + digit){ throw new NumberFormatException(s); } result -= digit; } }else{ throw new NumberFormatException(s); } if(negative){ if(i > 1){ return result; }else{ throw new NumberFormatException(s); } }else{ return -result; } }
可以看出來jdk里也是一個(gè)字符一個(gè)字符的判斷,如果有一個(gè)不是數(shù)字就拋出NumberFormatException,所以還不如這個(gè)工作由我們自己來做,還省得再拋出一次異常。
關(guān)于java判斷變量是否為數(shù)字的方法就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。