此方法必须检查字符串中是否有数字,否则应在控制台中输入“不是数字” 但事实并非如此;请帮我检查一下!
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;
}
}
答案 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;
}