Java 为什么我的扫描器仍然需要一个空格字符

Java 为什么我的扫描器仍然需要一个空格字符,java,Java,投入:1 2 3 目标:每个数字都将填充在同一个数组中。空间将被排除在外 Scanner in = new Scanner(System.in); String n = in.nextLine(); System.out.println(n); int[] nums = new int[n.length()]; for (int i = 0; i < n.length(); i++) { System.out.println(n.charAt(i)); if (!S

投入:1 2 3

目标:每个数字都将填充在同一个数组中。空间将被排除在外

Scanner in = new Scanner(System.in);
String  n = in.nextLine();
System.out.println(n);

int[] nums = new int[n.length()];
for (int i = 0; i < n.length(); i++) {
     System.out.println(n.charAt(i));
     if (!String.valueOf(n.charAt(i)).equalsIgnoreCase(" ")) {
          nums[i] = Character.getNumericValue(n.charAt(i));
     }
}
Scanner-in=新的扫描仪(System.in);
字符串n=in.nextLine();
系统输出println(n);
int[]nums=newint[n.length()];
对于(int i=0;i

我不知道为什么它仍然包含空格

您可以使用以下方法拆分输入行:

String  n = in.nextLine();
String[] splitLine = n.split(" ");
for (String s : splitLine){
   //you can save the num in an array
   int num = Integer.parseInt(s);
}

按照这种方式,nums数组中的元素数将与“n”中的字符数相同。在char是空格的地方,你会得到值0。 您可以这样尝试:

    String[] numStrings = n.split("\\D+");
    int[] nums = new int[numStrings.length];
    int i = 0;
    for (String num : numStrings) {
        nums[i] = Integer.parseInt(num);
        i++;
    }

这段代码的问题是,当您查看的
char
是一个空格时,您会增加
i
事件,这样您的数组中将有空的位置
nums


您可以通过以下方式轻松解决此问题:

String n = in.nextLine().replaceAll("\\D", "");
我将从您键入的内容中删除所有
非数字字符
,这样您就不必检查:

int[] nums = new int[n.length()];
for (int i = 0; i < n.length(); i++){
    nums[i] = Character.getNumericValue(n.charAt(i));
}

擦除所有非数字后,第二行将把每一行拆分为一个数组,然后转换为
int
,然后转换为
数组
我将
.equalsIgnoreCase
更改为
.equals
,并使用指针插入数组

        Scanner in = new Scanner(System.in);
        String  n = in.nextLine();
        System.out.println(n);
        int pointer = 0;

        int[] nums = new int[n.length()];
        for (int i = 0; i < n.length(); i++) {

            if (!String.valueOf(n.charAt(i)).equals(" ")) {

            nums[pointer] = Character.getNumericValue(n.charAt(i));
            pointer++;

             }
        }
Scanner-in=新的扫描仪(System.in);
字符串n=in.nextLine();
系统输出println(n);
int指针=0;
int[]nums=newint[n.length()];
对于(int i=0;i
实现这一目标的一个简单方法是执行以下操作:

String  n = in.nextLine().replace(" ", "");
int nums[] = new int[n.length()];
int i=0;
for(char c : n.toCharArray()) {
    nums[i++] = Character.getNumericValue(c);
}

您是否尝试过使用调试器进行单步调试?如果(!String.valueOf(n.charAt(i)).equalsIgnoreCase(“”)执行手动检查,显然这不起作用,但调试器显示元素不是空的。。这是一个巨大的代码片段,我可能太累了。要么拿出它!或者去掉“ignoreCase”,它们一起给出了相反的期望结果。我嵌入它是因为
“!=”,但让我试试。编辑:不,仍然是控制台中显示的相同行为。但是如果我错了,请纠正我,
!String.valueOf(n.charAt(i)).equalsIgnoreCase(“”
表示不接受任何空格字符。正常情况下,是的,但对我来说,它只打印带有空框的数字,如果您在末尾打印所有元素,您有什么?他还是编辑了它。不回来了,我已经给他了,我只是不想收回。作为我的感谢,额外的东西将被发送,不要问我在说什么。Lol@Plain_Dude_Sleeping_Alone好的,我明白了,谢谢:p我会删除我的评论,它们现在没用了不,不要。不要只是删除东西,这样将来的读者可能会以某种方式追踪问题本身背后的原因/逻辑/任何东西。如果你输入两个相邻的空格,或者特殊的字符或字母,这是不起作用的。该死,这对第二个相邻的空格不起作用。编辑:我错过了你的编辑。非常感谢。再次接受并加一。
String  n = in.nextLine().replace(" ", "");
int nums[] = new int[n.length()];
int i=0;
for(char c : n.toCharArray()) {
    nums[i++] = Character.getNumericValue(c);
}