我有一个问题,我碰巧读了几个代码,但是查询是如何捕获每个组织的数据,我的意思是在某些列中总是存在值,如果它们是空的,我会'我将在对象上保存为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(),但将所有数据放在一起,有没有办法分隔每个数据,无论每个数据之间的间距如何。 而每行倒数第二个数据都可以看作是可打印的输入数据文件。
答案 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());
}
}
这将输出:
您好
世界
一些
空间
之间
这里
您可以根据此解决方案。也许有一个构建器模式可以返回给定当前行所需的对象..