在提供的文件的每一行中,每一行都遵循以下结构:
8个数字,然后是1个逗号,然后是2个数字。
例如: 98468631,的 51
我想仅使用逗号后的两位数字。
以下是该计划:
import java.io.*;
import java.util.regex.*;
public class Read {
public static void main(String[] args) {
String[] marks = new String[100];
File file = new File("sd100-marks.csv");
try {
BufferedReader reader = new BufferedReader(new FileReader(file));
for(int i = 0; i < 100; i++) {
try {
String line = reader.readLine();
String[] sp = line.split(",");
line = sp[0];
marks[i] = line;
} catch (IOException e) {
System.out.println("Could not read!");
}
}
} catch (FileNotFoundException e) {
System.out.println(e);
}
for(int i = 0; i < 100; i++) {
System.out.println(marks[i]);
}
}
}
基本上,我不确定在split()
方法中使用什么正则表达式。现在,我已经“,”传入了该方法,但这对我想要做的事情没有用,只是在逗号之前显示所有数字。
答案 0 :(得分:2)
Sring.split
确实是使用的方法。
String[] sp = line.split(",");
//sp[0] contains the first 8 digits
//sp[1] contains the part after the ",".
所以使用:
line = sp[1];//instead of sp[0]
答案 1 :(得分:1)
split 方法的工作方式就像调用带有给定表达式和limit参数为零的双参数split方法一样。因此,尾随空字符串不包含在结果数组中。
例如,字符串“boo:and:foo”会产生以下结果:
Regex Result
: { "boo", "and", "foo" }
o { "b", "", ":and:f" }
试一试;
String line = "98468631,51";
String[] sp = line.split(",");
System.out.println(sp[0]);//98468631
System.out.println(sp[1]);//51
答案 2 :(得分:1)
重要提示:请勿在{{1}}循环中使用String.split()
。
在这种情况下使用for
效率更高。
Pattern/Matcher
答案 3 :(得分:0)
当你得到第一部分时,这似乎是错误的:
line = sp[0];
尝试获取第二部分,您还应检查sp
中有两部分:
if (sp.length > 1) {
line = sp[1];
}
答案 4 :(得分:0)
如果你真的想使用正则表达式,可以使用以下正则表达式并提取组:([0-9] ),([0-9] ) 然后组(2)会在逗号后面给出数字。您可以参考this文档了解更多详情。