先生,我在这里试图检查是否存在任何号码。如果有任何数字,那么它将打印数字。但是,当我尝试运行此代码时,我面临错误。请帮我修复错误。
我的代码
import java.util.Scanner;
public class test1{
public static void main (String[] args){
Scanner input = new Scanner(System.in);
int a = input.nextInt();
String arr[]= new String[a];
for(int i=0;i<a;i++){
arr[i]=input.next();
}
for(int i=0;i<a;i++){
String sub[] = arr[i].split("");
for(int j=0;j<sub.length;j++){
char x = arr[i].charAt(j);
if(Character.isDigit(x)){
System.out.println(x);
}
}
}
}
}
我收到此错误:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 4
at java.lang.String.charAt(String.java:686)
at test1.main(test1.java:13)
Java Result: 1
请你帮我解决这个问题。
答案 0 :(得分:3)
不使用String.split
,而是将字符串转换为字符数组:
try (Scanner input = new Scanner(System.in)) {
System.out.print("Enter number of strings: ");
int a = input.nextInt();
String arr[] = new String[a];
for (int i = 0; i < a; i++) {
System.out.print(String.format("Enter string #%d: ", i + 1));
arr[i] = input.next();
}
for (int i = 0; i < a; i++) {
for (char c : arr[i].toCharArray()) {
if (Character.isDigit(c)) {
System.out.println(c);
}
}
}
}
注意:我将Scanner
置于try-with-resources构造中,因为您没有正确关闭它。
使用示例:
Enter number of strings: 3
Enter string #1: abc
Enter string #2: 1abc
Enter string #3: a1b2c3
1
1
2
3
答案 1 :(得分:2)
使用string.lenght()
:
String sub[] = new String[arr[i].lenght()];
for(int j=0;j<arr[i].length();j++){
char x = arr[i].charAt(j);
if(Character.isDigit(x)){
System.out.println(x);
}
}
编辑:数组sub[]
甚至没有使用,因此根本不需要声明它。
答案 2 :(得分:0)
更改
for(int j=0;j<sub.length;j++)
到
for(int j=0;j<sub.length-1;j++)
我测试了它并按预期工作:)
这是因为当输入字符串的长度为4时,length
的{{1}}为5.例如:input sub
的长度为5,并且在{{1}之后它的长度为6,因为它在数组中是hello
。所以split("")
中的String是一个比数组中String更大的索引:)
答案 3 :(得分:0)
如果直接使用String.split("")
构建 String [] 数组。第一个是空的。
让我们分割字符串“123
”,例如,您将获得一个String []数组作为[,1,2,3]
,而不是[1,2,3]
。
String[] text = "123".split("");
//[, 1, 2, 3]
System.out.println(Arrays.toString(text));
这个额外的空白是异常的原因:StringIndexOutOfBoundsException:
您可以跳过第一个空字符串,并从 1 而不是 0 开始索引。
更改以下代码
来自
for(int i=0;i<a;i++){
String sub[] = arr[i].split("");
for(int j=0;j<sub.length;j++){
char x = arr[i].charAt(j);
if(Character.isDigit(x)){
System.out.println(x);
}
}
}
到
for(int i=0;i<a;i++){
String sub[] = arr[i].split("");
for(int j=1;j<sub.length;j++){
char x = arr[i].charAt(j-1);
if(Character.isDigit(x)){
System.out.println(x);
}
}
}
您将获得预期结果,示例运行如下:
2
12dec
34
1
2
3
4