【问题标题】:How to match two or more spaces in java.util.Scanner?如何匹配 java.util.Scanner 中的两个或多个空格?
【发布时间】:2013-11-16 18:45:36
【问题描述】:

我有一排数字,应该用空格分隔。

但空格可能长或短,或者只是一个空格。

我没有写出正确分割数字的正则表达式。这是我的尝试:

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

谢谢!

【问题讨论】:

  • 有什么问题?你能展示一些示例输入和输出吗?
  • 您期望编辑的输出是什么?
  • 我想得到整数数组 - Integer[] numbers

标签: java regex java.util.scanner


【解决方案1】:

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

【讨论】:

  • 尽管\\s+ 表示\\s{1,},OP 已经使用+1 来解释next() 的问题并建议nextLine()
  • @peeskillet。我的解决方案是nextLine.replaceAll("(\\s+)", ",");。但这有时会导致第一个字符为,,所以我也将其替换为 "" 。现在可以读取 247881 行整数
  • 所以你的问题是如何删除第一个,
  • 您应该只发布一个新问题,标记为“如何避免 replaceAll((\\s+), ",") 从添加逗号到乞求字符串”。或者“为什么 replaceAll 将我的 String 的第一个字符读取为空格?”
  • @VolodymyrLevytskyi 似乎您的字符串在开始时有空格。如果是这样,请尝试使用trim() 方法将其删除,例如nextLine.trim().replaceAll("(\\s+)", ",");
【解决方案2】:

看来你可以用List&lt;Integer&gt;轻松解决你的问题

List<Integer> myList = new ArrayList<>();
while (scanner.hasNextInt()) {
    myList.add(scanner.nextInt());
}

以后如果你真的需要Integer[] 数组,你可以创建一个

Integer[] array = myList.toArray(new Integer[myList.size()]);

【讨论】:

  • 这很好,但我需要使用方法 readLine 逐行读取,然后处理 String.+1 反正
  • @VolodymyrLevytskyi 我能问一下为什么你必须用readLine()(或者如果我们在谈论扫描仪,也许nextLine())来读取你的数据?
  • 我有疯狂的学校任务。请看我的下一条评论
【解决方案3】:

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

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

【讨论】:

  • But space might be long or short or just single space.
  • @anubhava,OP 想要至少 2 个或更多。
  • 你可能是一个很好的读心者,但 OP 写道:or just single space
  • 您在回答中所说的是真的,但这并不能解决 OP 问题。请更正或删除您的答案,因为现在它对任何人都没有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多