从平面文件txt中捕获字符串中的每个数据?

时间:2014-05-13 03:14:14

标签: java replace split

我有一个问题,我碰巧读了几个代码,但是查询是如何捕获每个组织的数据,我的意思是在某些列中总是存在值,如果它们是空的,我会'我将在对象上保存为NULL。

输入:

19150526    1   7       1
19400119    2   20  1   1
19580122    2   20  9   1
19600309    1   20  7   1
19570310    2   20  5   1
19401215    1   10  1   1
19650902    2   20  0   1
19510924    1   20  3   1
19351118    2   30      1
19560118    1   20  0   1
19371108    2   7       1
19650315    1   30  6   1
19601217    2   30  4   1

Code Java:

FileInputStream fstream = new FileInputStream("C:\\sppadron.txt");
DataInputStream entrada = new DataInputStream(fstream);
BufferedReader buffer = new BufferedReader(new InputStreamReader(entrada));
String strLinea;
List<Sppadron> listSppadron = new ArrayList<Sppadron>();
while ((strLinea = buffer.readLine()) != null){
        Sppadron spadron= new Sppadron();
        spadron.setSpNac(strLinea.substring(143, 152).trim());   
        spadron.setSpSex(strLinea.substring(152, 154).trim());
        spadron.setSpGri(strLinea.substring(154, 157).trim());
        spadron.setSpSec(strLinea.substring(157, 158).trim());
        spadron.setSpDoc(strLinea.substring(158, strLinea.length()).trim());  
        listSppadron.add(spadron);
}
entrada.close();

最初我有这样做的想法,但实际上发生的是每个字符串的位置看起来并不固定,所以我碰巧使用split(),但每个数据之间有不同的空格最新的使用replaceAll(),但将所有数据放在一起,有没有办法分隔每个数据,无论每个数据之间的间距如何。 而每行倒数第二个数据都可以看作是可打印的输入数据文件。

3 个答案:

答案 0 :(得分:0)

尝试以下

strLinea = strLinea.trim().replaceAll("\\s"," ");
String stArr[] = strLinea.split(" ");

然后根据您的要求进一步使用strArr

如果您想将其作为列表,则可以使用Arrays.asList(strArr);

答案 1 :(得分:0)

试试这个..

替换任何您看到带有单个空格的连续空格的地方

strLinea.replaceAll("\\s+"," ")

然后做你的分裂

类似

String[] tokensVal = strLinea.split("\\s+");

答案 2 :(得分:0)

您使用StringBuffer在正确的行上逐行读取文件。在缓冲区中有一行后,尝试使用StringTokenizer类来拉出每个字段。默认情况下,StringTokenizer将在空格上分割,您可以遍历列。

考虑以下内容:

public static void main(String[] args) {
    String s = "hello\t\tworld   some spaces \tbetween       here";
    StringTokenizer st = new StringTokenizer(s);
    while(st.hasMoreTokens())
    {
        System.out.println(st.nextToken());
    }
}

这将输出:

您好
世界
一些
空间

之间 这里

您可以根据此解决方案。也许有一个构建器模式可以返回给定当前行所需的对象..