【问题标题】:Extract each seperate number from string从字符串中提取每个单独的数字
【发布时间】:2018-09-25 21:11:37
【问题描述】:

我有这个作为输入“1 2 3 4 5”,我想要这样

int[] numbers = new int[5];
number[0] = 1;
number[1] = 2;
number[2] = 3;
number[3] = 4;
number[4] = 5;

那么如何从字符串中提取每个数字并将其放入 int 数组中呢?

    ConsoleIO io = new ConsoleIO();
    int[] numbers = new int[5];

    io.writeOutput("Type in 5 numbers");

    String input = io.readInput();

    // If input is longer than 1 character for example, "1 2 3 4 5"
    if(input.length() > 1) {
        System.out.println(input.length());
        for(int y = 0; y < io.readInput().length(); y++) {
            numbers[y] = Integer.parseInt(io.readInput().substring(y, io.readInput().indexOf(" "))); 
        }
        return;
    }
    // If input is one number for example, "1"
    else {
        for(int i = 0; i < numbers.length; i++) {
            numbers[i] = Integer.parseInt(io.readInput());
        }
    }

else 可以,所以如果我输入一个数字并按回车键,然后再按下一个数字,一切都很好。但是,如果我有一个中间有空格的数字序列(“1 2 3 4 5”),程序就会中断。

【问题讨论】:

  • 你可以使用 splite 并删除 java 8 的空间

标签: java arrays string


【解决方案1】:
String input = io.readInput();
int[] arr = new int[5];

if(input.length() >= 5){
    String[] c = input.split(" ");
    for(int i = 0; i < c.length(); i++){
        arr[i] = Integer.parseInt(c[i]);
    }
}

【讨论】:

  • 这在两种情况下会失败:如果输入少于五个,则代码不会出错;并且当输入超过五个时,代码就会消失,因为您离开了arr 的末尾,即 5 长。您应该根本没有if 条件并在确定c 之后初始化arr,以便您可以将其长度设置为c 的长度,或者如果不完全是五个,您应该给出错误值。
  • 我只是想向他展示拆分方法以及如何使用它,而不是向他展示他的程序所需的所有代码。他实际上只是给我发短信说这个答案对他的程序有帮助。他已经创建了检查错误输入的整个“反傻瓜”系统,所以他没有用输入整个源代码
【解决方案2】:

为什么不使用Scanner,然后使用splitparse

Scanner in = new Scanner(System.in);
String[] nums = in.nextLine().split(" ");
for(int i = 0; i <=5; i++) {
   numbers[i] = Integer.parseInt(nums[i]);
}

【讨论】:

  • 您可以在= new Scanner(System.in);在for循环中
  • @AbdessamadHALLAL 这将在循环的迭代中创建一个新的Scanner 对象,并且还需要String[] nums = in.nextLine().split(" "); 在循环内,这会导致问题
  • 我相信这也有效,但我选择@Joeri Akkerman 的答案,因为他使用了我已经使用过的 io。谢谢你的回答。
【解决方案3】:

假设您的输入始终是彼此之间有空格的数字(或只有一个数字),在 Java 8 中您可以这样工作:

String[] splits = input.split(" ");
int[] result =  Arrays.stream(splits).mapToInt(Integer::parseInt).toArray();

【讨论】:

    【解决方案4】:
    import java.util.*;
    public class Solution {
        public static void main(String []args) {
            Scanner in = new Scanner(System.in);
            String[] nums = in.nextLine().split(" ");
            int[] numbers = new int[5];
            for(int i = 0; i <5; i++) {
                numbers[i] = Integer.parseInt(nums[i]);
                System.out.println(numbers[i]);
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2013-10-04
      • 1970-01-01
      • 2015-10-16
      • 1970-01-01
      • 1970-01-01
      • 2021-09-19
      • 2019-02-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多