我愿意在 Java 中从一行中读取一系列数字,如下所示:
1 80,982 163,8164 170,2620
所以最终我想要结果数组[1, 80, 982, 163, 8164, 170, 2620]
我正在考虑使用扫描仪,但不清楚如何以一种简洁的方式实现它,我可以请教一些技巧吗?
谢谢阅读!
我愿意在 Java 中从一行中读取一系列数字,如下所示:
1 80,982 163,8164 170,2620
所以最终我想要结果数组[1, 80, 982, 163, 8164, 170, 2620]
我正在考虑使用扫描仪,但不清楚如何以一种简洁的方式实现它,我可以请教一些技巧吗?
谢谢阅读!
如果是我,我会读一行BufferedReader
,然后简单地使用
String[] values = line.split("[, ]");
我通常觉得Scanner
不整洁和矫枉过正。
是的,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());
}
}
如果您从文件中读取,它会特别有效。(为您减少工作量。)
扫描仪很好,只需设置所需的分隔符模式,请参阅this。
试试这个:
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[] 最好的解决方案是 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)
.在这里检查小提琴。
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]);
}
对于带有一些逗号、空格和带有空格的逗号的简单输入文件,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