尝试/捕获,捕获没有响应

时间:2019-11-26 20:05:33

标签: java

此方法必须检查字符串中是否有数字,否则应在控制台中输入“不是数字”  但事实并非如此;请帮我检查一下!

public static int[] findNumbers(String text){
    String[]str=text.split(" ");
    int count =0;
    for (String s:str){
        if (isNumeric(s)) count++;
    }

    int[] numbers= new int[count];

    int index=0;
    try {
        for (String s:str){
            if (isNumeric(s)) numbers[index]=Integer.parseInt(s);
        }
        return numbers;

    }catch (Exception e){
        System.out.println("not a number");
    }
    return numbers;
}

private static boolean isNumeric(String text){
    if (text==null) return false;
    char[] chars=text.toCharArray();
    for (char ch:chars){
        if (!Character.isDigit(ch)) return false;
    }
    return true;
}

}

3 个答案:

答案 0 :(得分:2)

向isNumeric添加else:

if (isNumeric(s)) {
    numbers[index]=Integer.parseInt(s);
} else {
    System.out.println("not a number");
}

更改捕获中的错误消息。它可能仍会被调用,例如当字符串变大成为Integer时。

答案 1 :(得分:2)

尝试这种实现方式,避免自己执行isNumeric并返回列表而不是数组,因为numbers的长度不固定

List<Integer> numbers = new ArrayList<>();
for (String s : str) {
    try {
         numbers.add(Integer.valueOf(s));
    } catch (NumberFormatException e) {
         System.out.println(s + " not a number");
    }
}

答案 2 :(得分:1)

您可以按照以下步骤减少代码:

public static List<Integer> findNumbers(String text) {
    String[] str = text.split(" ");
    List<Integer> numbers = new ArrayList<Integer>();
    for (String s : str) {
        try {
            numbers.add(Integer.parseInt(s));
        } catch (NumberFormatException e) {
            System.out.println(s+" is not an integer");
        }
    }
    return numbers;
}