如何检查字符串是否为数字

Dee*_*pak 7 java arrays hashmap

我已经转换为Core Java中的Map问题.

以下是要求:
给定下面的String数组

String str[] = {"abc","123","def","456","ghi","789","lmn","101112","opq"};          
Run Code Online (Sandbox Code Playgroud)

将其转换为Map,使得结果输出低于

产量

======      ======         
key         Value        
======      ======                  
abc          true       
123          false       
def          true      
456          false

应该为数组中的每个元素打印上面的内容.我已经编写了代码,但它没有工作,我被卡住了.请让我知道如何解决.提前致谢.

import java.util.HashMap;       
import java.util.Iterator;       
import java.util.Map;       

public class CoversionToMap {

/**
 * @param args
 */
public static void main(String[] args) {
    String str[] = {"abc","123","def","456","ghi","789","lmn","101112","opq"};
    Map m = new HashMap();
    for(int i=0;i<str.length;i++){
        if(Integer.parseInt(str[i]) < 0){
            m.put(str[i],true);
        }else{
            m.put(str[i],false);
        }
    }
    //Print the map values finally
    printMap(m);
}   

public static void printMap(Map mp) {
        Iterator it = mp.entrySet().iterator();
        while (it.hasNext()) {
            Map.Entry pairs = (Map.Entry)it.next();          
            System.out.println(pairs.getKey() + " = " + pairs.getValue());
        }
}  
}           
Run Code Online (Sandbox Code Playgroud)

例外:

Exception in thread "main" java.lang.NumberFormatException: For input string: "abc"       
    at java.lang.NumberFormatException.forInputString(Unknown Source)       
    at java.lang.Integer.parseInt(Unknown Source)       
    at java.lang.Integer.parseInt(Unknown Source)       
    at CoversionToMap.main(CoversionToMap.java:22)       

vic*_*irk 8

每个人都建议使用异常处理,这里没有什么特别要保证使用这样的例外情况,你不要尝试在你的车里左转,如果你崩溃了,你呢?这样的事情应该做到这一点

Map<String, Boolean> m = new HashMap<String, Boolean>();
for (String str: strs) {
    m.put(str, isInteger(str));
}

public boolean isInteger(String str) {
    int size = str.length();

    for (int i = 0; i < size; i++) {
        if (!Character.isDigit(str.charAt(i))) {
            return false;
        }
    }

    return size > 0;
}
Run Code Online (Sandbox Code Playgroud)

捕获抛出异常更清晰,更有效,即使有99%的整数,因为甚至不需要整数值,因此不需要转换.

  • 您可能希望在开头添加一个减号的检查 (3认同)
  • 是的,但是你最好还是先使用Commons/Lang :-) (2认同)
  • -1这绝对不比使用异常处理的更短,更清晰的版本更清晰.与您的理解相反,异常不仅适用于"崩溃"情况,而且是一种有效且可接受的编程方法.此外,由于parseInt()保证可以解析String,而你的不能解析,因此它更易于维护. (2认同)

Boz*_*zho 5

Integer.parseInt(..) 抛出无效输入的异常.

您的if子句应如下所示:

if (isNumber(str[i])) {
   ...
} else {
   ...
}
Run Code Online (Sandbox Code Playgroud)

哪里isNumber可以以多种方式实施.例如:

  • 然后使用第一个选项 (6认同)
  • 通过使用NumberUtils,您将获得经过良好测试的快速实现,优于您自己未经测试的代码. (4认同)