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

Java 从平面文件txt中捕获字符串中的每个数据?,java,replace,split,Java,Replace,Split,我有一个问题,我碰巧读了一些简单的arhivo代码,但问题是如何捕获组织的每个数据,我的意思是总是有值​​在某些列中,如果它们为空,我将在对象上另存为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

我有一个问题,我碰巧读了一些简单的arhivo代码,但问题是如何捕获组织的每个数据,我的意思是总是有值​​在某些列中,如果它们为空,我将在对象上另存为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
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();
最初我有这样做的想法,但实际上,每个字符串的位置并不像看上去那样固定,所以我碰巧使用了拆分,但每个数据和最新的数据之间有不同的空格,使用了replaceAll,但将所有数据放在一起,是否有任何方法可以分离每个数据,而不考虑每个数据之间的间距。 而每一行倒数第二位的数据都可以看到它是空的,作为可打印的输入数据文件

strLinea = strLinea.trim().replaceAll("\\s"," ");
String stArr[] = strLinea.split(" ");
然后根据您的要求使用strArr进行进一步的测试

如果希望将其作为列表,可以使用Arrays.asListstrArr

试试这个方法

用单个空格替换看到相邻空格的位置

strLinea.replaceAll("\\s+"," ")
然后做劈叉

差不多

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

使用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());
    }
}
这将输出:

你好 世界 一些 空间 之间 这里


您可以基于此解决方案。可能有一个生成器模式,可以在给定当前行的情况下返回所需的对象。

根据您的JVM版本,拆分会采取一种新的方式。用空格分隔的表达式应该是什么,留给你练习一下。谢谢朋友,给了我实现这个解决方案的想法。弦卡德纳=20 5 1;字符串strlena=cadena.trim.replaceAll\\s;字符串stArr[]=strlena.split;对于字符串str:stArr{System.out.println->+str;ifstArr.length>=3{if!str.equalstarr[0]&&!str.equalstarr[stArr.length-1]&!str.isEmpty{System.out.println=>+str;}}如果要使用不同的数据类型,请使用Scanner类