我愿意在Java中从一行读取序列号的象下面这样:读取由逗号和空格分隔的一个行 - java的
1 80,982 163,8164 170,2620
所以我最终想要的结果阵列[1, 80, 982, 163, 8164, 170, 2620]
我正在考虑使用扫描仪,但不清楚如何以一种整洁的方式实施它,我可以问一些技巧吗?
感谢您的阅读!
我愿意在Java中从一行读取序列号的象下面这样:读取由逗号和空格分隔的一个行 - java的
1 80,982 163,8164 170,2620
所以我最终想要的结果阵列[1, 80, 982, 163, 8164, 170, 2620]
我正在考虑使用扫描仪,但不清楚如何以一种整洁的方式实施它,我可以问一些技巧吗?
感谢您的阅读!
是的扫描仪类适用于此。
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());
}
}
如果您正在从文件中读取,它的工作效果特别好。 (减少了你的工作)
谢谢你的提示! – Bpache 2013-03-12 10:31:11
扫描仪正常,只需设置所需的分隔符模式,请参见this。
如果是我,我会用BufferedReader
读取一行,然后简单地使用
String[] values = line.split("[, ]");
我经常发现Scanner
凌乱和矫枉过正。
这不起作用。他的例子可以用“”或“,”来分隔 – 2013-03-12 03:17:14
@AthomSfere:'[]'代表一个字符类,在这种情况下,正则表达式可以被读作“集合中的一个字符”,“''''' 。因此它应该工作得很好。 – 2013-03-12 03:18:24
我现在看到它。谢谢。 – 2013-03-12 03:21:03
试试这个:
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);
}
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]);
}
既然你想要的String []最好的解决办法是String.split
String[] s = str.split("[ ,]+");
分裂您的字符串低于正则表达式。
String input = "1 80,982 163,8164 170,2620 ";
String[] values = input.split("\\s*(,|\\s)\\s*");
for(String val: values)
{
System.out.println(val);
}
我符合以下标准。
(,|\\s)
。如果你有更多的一个分隔符,你可以包含在括号内,如(&|,|@|\\s)
。检查小提琴在这里。
对于一个简单的输入文件与一些逗号,空格和逗号用空格,那么赖斯的正则表达式和叶夫根尼的都与拆分工作。在后一种情况下,+符号很重要。此数据没有其他选项可用: 1.0 2.0 3.0 4.0 5.0,6.0 7.0 8.0 9.0 10.0,11.0 12.0
Stringtokenizer? – VirtualTroll 2013-03-12 03:13:42
@Amine nope,这个类只不过是遗产,而且在新代码中不鼓励。 http://docs.oracle.com/javase/7/docs/api/java/util/StringTokenizer.html – 2013-03-12 03:19:45
看着你的问题的原始资料,看起来你的行还包含tab(''\ t'')字符。一定要在你的问题中包含这些信息 - 这对你收到的答案的正确性很重要。 – andr 2013-03-12 03:42:30