亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在Java中檢查字符串是否為數字

如何在Java中檢查字符串是否為數字

如何在Java中檢查字符串是否為數字在解析字符串之前,如何檢查字符串是否為數字?
查看完整描述

4 回答

?
繁星coding

TA貢獻1797條經驗 獲得超4個贊

帶著阿帕奇公域朗3.5及以上:NumberUtils.isCreatableStringUtils.isNumeric.

帶著阿帕奇公域朗3.4及以下:NumberUtils.isNumberStringUtils.isNumeric.

您也可以使用StringUtils.isNumericSpace返回true對于空字符串,并忽略字符串中的內部空格。另一種方法是使用StringUtils.isParsable根據Java,它基本上檢查數字是可解析的。


查看完整回答
反對 回復 2019-05-30
?
繁花不似錦

TA貢獻1851條經驗 獲得超4個贊

這通常是用一個簡單的用戶定義的函數(即滾動你自己的“isNDigic”函數)來完成的。

類似于:

public static boolean isNumeric(String str) { 
  try {  
    Double.parseDouble(str);  
    return true;
  } catch(NumberFormatException e){  
    return false;  
  }  }

但是,如果您經常調用這個函數,并且您希望許多檢查由于不是一個數字而失敗,那么這個機制的性能就不會很好,因為您依賴于每次失敗都拋出異常,這是一個相當昂貴的操作。

另一種方法可能是使用正則表達式檢查數字的有效性:

public static boolean isNumeric(String str) {
  return str.matches("-?\\d+(\\.\\d+)?");  //match a number with optional '-' and decimal.}

不過,請注意上面的RegEx機制,因為如果您使用的是非阿拉伯數字(即從0到9以外的數字),它將失敗。這是因為RegEx的“\d”部分將只與[0-9]相匹配,而且實際上并不是國際上所知的。(感謝俄勒岡幽靈指出這一點!)

甚至另一種選擇是使用Java的內置java.text.NumberFormat對象來查看解析字符串后解析器的位置是否位于字符串的末尾。如果是,我們可以假設整個字符串是數字的:

public static boolean isNumeric(String str) {
  NumberFormat formatter = NumberFormat.getInstance();
  ParsePosition pos = new ParsePosition(0);
  formatter.parse(str, pos);
  return str.length() == pos.getIndex();}


查看完整回答
反對 回復 2019-05-30
?
九州編程

TA貢獻1785條經驗 獲得超4個贊

如果您使用的是Android,那么您應該使用:

android.text.TextUtils.isDigitsOnly(CharSequence?str)

保持簡單。大多數情況下,每個人都可以“重新編程”(同樣的事情)。


查看完整回答
反對 回復 2019-05-30
?
HUX布斯

TA貢獻1876條經驗 獲得超6個贊

對于使用異常測試字符串是否為數字,我也有類似的性能考慮。因此,我最終拆分字符串并使用java.lang.Character.isDigit().

public?static?boolean?isNumeric(String?str){
????for?(char?c?:?str.toCharArray())
????{
????????if?(!Character.isDigit(c))?return?false;
????}
????return?true;}

根據Javadoc,?Character.isDigit(char)將正確識別非拉丁數字。就性能而言,我認為簡單的N個比較(其中N是字符串中的字符數)比執行正則匹配更具有計算效率。

更新:正如Jean-Fran ois Corbett在評論中指出的,上述代碼只驗證正整數,這涵蓋了我的大部分用例。下面是根據系統中使用的默認區域設置正確驗證小數的更新代碼,假設小數分隔符只在字符串中出現一次。

public?static?boolean?isStringNumeric(?String?str?){
????DecimalFormatSymbols?currentLocaleSymbols?=?DecimalFormatSymbols.getInstance();
????char?localeMinusSign?=?currentLocaleSymbols.getMinusSign();

????if?(?!Character.isDigit(?str.charAt(?0?)?)?&&?str.charAt(?0?)?!=?localeMinusSign?)?return?false;

????boolean?isDecimalSeparatorFound?=?false;
????char?localeDecimalSeparator?=?currentLocaleSymbols.getDecimalSeparator();

????for?(?char?c?:?str.substring(?1?).toCharArray()?)
????{
????????if?(?!Character.isDigit(?c?)?)
????????{
????????????if?(?c?==?localeDecimalSeparator?&&?!isDecimalSeparatorFound?)
????????????{
????????????????isDecimalSeparatorFound?=?true;
????????????????continue;
????????????}
????????????return?false;
????????}
????}
????return?true;}


查看完整回答
反對 回復 2019-05-30
  • 4 回答
  • 0 關注
  • 1741 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號