2013-03-12 76 views
4

我愿意在Java中从一行读取序列号的象下面这样:读取由逗号和空格分隔的一个行 - java的

1 80,982 163,8164     170,2620  

所以我最终想要的结果阵列[1, 80, 982, 163, 8164, 170, 2620]

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

感谢您的阅读!

+1

Stringtokenizer? – VirtualTroll 2013-03-12 03:13:42

+0

@Amine nope,这个类只不过是遗产,而且在新代码中不鼓励。 http://docs.oracle.com/javase/7/docs/api/java/util/StringTokenizer.html – 2013-03-12 03:19:45

+1

看着你的问题的原始资料,看起来你的行还包含tab(''\ t'')字符。一定要在你的问题中包含这些信息 - 这对你收到的答案的正确性很重要。 – andr 2013-03-12 03:42:30

回答

4

是的扫描仪类适用于此。

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

如果您正在从文件中读取,它的工作效果特别好。 (减少了你的工作)

+0

谢谢你的提示! – Bpache 2013-03-12 10:31:11

2

扫描仪正常,只需设置所需的分隔符模式,请参见this

6

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

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

我经常发现Scanner凌乱和矫枉过正。

+0

这不起作用。他的例子可以用“”或“,”来分隔 – 2013-03-12 03:17:14

+1

@AthomSfere:'[]'代表一个字符类,在这种情况下,正则表达式可以被读作“集合中的一个字符”,“''''' 。因此它应该工作得很好。 – 2013-03-12 03:18:24

+0

我现在看到它。谢谢。 – 2013-03-12 03:21:03

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); 
} 
0
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]); 
    } 
2

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

String[] s = str.split("[ ,]+"); 
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 program

0

对于一个简单的输入文件与一些逗号,空格和逗号用空格,那么赖斯的正则表达式和叶夫根尼的都与拆分工作。在后一种情况下,+符号很重要。此数据没有其他选项可用: 1.0 2.0 3.0 4.0 5.0,6.0 7.0 8.0 9.0 10.0,11.0 12.0