如何使用正则表达式仅使用一行的一部分? (JAVA)

时间:2016-02-29 11:41:53

标签: java regex

在提供的文件的每一行中,每一行都遵循以下结构:

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()方法中使用什么正则表达式。现在,我已经“,”传入了该方法,但这对我想要做的事情没有用,只是在逗号之前显示所有数字。

5 个答案:

答案 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

Split a String Q&A

Source

答案 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文档了解更多详情。