如何在java.util.Scanner中匹配两个或多个空格?

时间:2013-11-16 18:45:36

标签: java regex java.util.scanner

我有一排数字,应按空格分割。

但是空间可能很长或很短,或者只是单个空间。

我无法编写正确分割数字的正则表达式。这是我的尝试:

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    String next = scanner.next();

    System.out.println("split=" + Arrays.toString(next.split("\\s{1,}")));
}

帮助我在数字之间分割任意数量的空格。

编辑:以下是应该拆分以获取整数数组的行之一:

108 125 145  48  49  77  65  62  93 121 114 148 134 129 170 

我的尝试是

inputScanner.nextLine().split("\\s{1,}");

谢谢!

3 个答案:

答案 0 :(得分:2)

split("\\s+");用于一个或多个空格。

如果您只是从扫描仪获取下一个令牌,为什么还需要拆分?

String next = scanner.next();

也许你想要

String next = scanner.nextLine();

System.out.println("split=" + Arrays.toString(next.split("\\s+")));

如果要获取整行的整数值,可以执行此操作

String[] numString = next.split("\\s+");
int[] nums = new int[numString.length];

for (int i = 0; i < numString.length; i++){
    nums[i] = Integer.parseInt(numString[i].trim());
}

System.out.println(Arrays.toString(nums));

答案 1 :(得分:2)

您似乎可以使用List<Integer>

轻松解决问题
List<Integer> myList = new ArrayList<>();
while (scanner.hasNextInt()) {
    myList.add(scanner.nextInt());
}

以后如果你真的需要Integer[]数组,你可以用

创建一个
Integer[] array = myList.toArray(new Integer[myList.size()]);

答案 2 :(得分:0)

要匹配至少2个或更多空格,请使用正则表达式\s{2,}

System.out.println("split=" + Arrays.toString(next.split("\\s{2,}")));