4

我愿意在 Java 中从一行中读取一系列数字,如下所示:

1   80,982  163,8164                    170,2620    

所以最终我想要结果数组[1, 80, 982, 163, 8164, 170, 2620]

我正在考虑使用扫描仪,但不清楚如何以一种简洁的方式实现它,我可以请教一些技巧吗?

谢谢阅读!

4

8 回答 8

6

如果是我,我会读一行BufferedReader,然后简单地使用

String[] values = line.split("[, ]");

我通常觉得Scanner不整洁和矫枉过正。

于 2013-03-12T03:15:38.493 回答
5

是的,Scanner 类可以很好地处理这个问题。

public static void main(String[] args) throws Exception {
    Scanner s = new Scanner(strOrFile).useDelimiter(",| ");
    List<Integer> myList = new ArrayList<Integer>();
    while (s.hasNext()) {
       myList.add(s.nextInt());
    }
}

如果您从文件中读取,它会特别有效。(为您减少工作量。)

于 2013-03-12T03:15:50.353 回答
3

扫描仪很好,只需设置所需的分隔符模式,请参阅this

于 2013-03-12T03:15:04.337 回答
2

试试这个:

public static void main(String[] args) {
    String str = "1 80,982 163,8164 170,2620";
    String[] s = str.split(" |,");
    for(String ss:s)
        System.out.println(ss);
}
于 2013-03-12T03:18:08.843 回答
2

既然你想要 String[] 最好的解决方案是 String.split

String[] s = str.split("[ ,]+");
于 2013-03-12T04:07:25.583 回答
2

使用以下正则表达式拆分您的字符串。

 String input = "1   80,982  163,8164                    170,2620 "; 
        String[] values = input.split("\\s*(,|\\s)\\s*");
        for(String val: values)
        {
            System.out.println(val);

        }

我符合以下条件。

  1. 零个或多个空格(,|\\s)。如果您有多个分隔符,则可以将其包含在括号中,例如(&|,|@|\\s).
  2. 逗号和空格。

在这里检查小提琴。

Java程序

于 2013-03-12T04:21:49.553 回答
1
    String ss = "1 80,982 163,8164 170,2620";
    ss = ss.replaceAll(" ", ",");
    String arr[] = ss.split(",");
    for (int i=0;i<arr.length;i++) {
        System.out.println("line "+arr[i]);
    }
于 2013-03-12T03:19:36.057 回答
1

对于带有一些逗号、空格和带有空格的逗号的简单输入文件,Rais 的正则表达式和 Evgeniy 的正则表达式都适用于 split。在后一种情况下,+ 号很关键。其他选项均不适用于此数据:1.0 2.0 3.0 4.0 5.0,6.0 7.0 8.0 9.0 10.0, 11.0 12.0

于 2014-02-06T21:36:23.960 回答