为什么我的扫描仪仍然占用空格

时间:2017-07-20 13:07:16

标签: 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 (!String.valueOf(n.charAt(i)).equalsIgnoreCase(" ")) {
          nums[i] = Character.getNumericValue(n.charAt(i));
     }
}

我不知道为什么它还包含空格 " "

5 个答案:

答案 0 :(得分:3)

实现这一目标的一个简单方法是做类似的事情:

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

答案 1 :(得分:1)

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

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);
}

答案 2 :(得分:1)

你这样做的方式,nums数组中的元素数量与&#34; n&#34;中的字符数相同。在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++;
    }

答案 3 :(得分:1)

问题在于代码是当你看到的i是一个空格时你增加char事件,这样你就可以在阵列nums中找到空位

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

String n = in.nextLine().replaceAll("\\D", "");

我会从您输入的内容中删除所有non-digit characters,因此在您不必检查之后:

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

或者在使用Java8功能的较少行中(你甚至可以输入1 ^^):

String n = in.nextLine().replaceAll("\\D", "");
int[] nums = Arrays.stream(n.split("")).mapToInt(Integer::parseInt).toArray();

擦除所有非数字后,第二行将每个分成一个数组,然后转换为int然后转换为array

答案 4 :(得分:1)

我将.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++;

             }
        }