作者j19951102 (j19951102)
看板java
标题[问题] 如何读取不确定数量的档案内容
时间Sun Mar 29 11:57:55 2015
我现在要读取.off file,
http://goo.gl/H5tjUY,是一种储存3D图像资讯的格式
例如
OFF
#
# cube.off
# A cube.
# There is extra RGBA color information specified for the faces.
#
8 6 12
1.632993 0.000000 1.154701
0.000000 1.632993 1.154701
-1.632993 0.000000 1.154701
0.000000 -1.632993 1.154701
1.632993 0.000000 -1.154701
0.000000 1.632993 -1.154701
-1.632993 0.000000 -1.154701
0.000000 -1.632993 -1.154701
4 0 1 2 3 1.000 0.000 0.000 0.75
4 7 4 0 3 0.300 0.400 0.000 0.75
4 4 5 1 0 0.200 0.500 0.100 0.75
4 5 6 2 1 0.100 0.600 0.200 0.75
4 3 2 6 7 0.000 0.700 0.300 0.75
4 6 5 4 7 0.000 1.000 0.000 0.75
第一行是OFF
再来可能有注解,用#开头,注解可以在一行中的任意位置
再来8 6 12代表顶点、面、边的个数
接下来8行是顶点的座标
再接下来六行是面的资讯,每一行的第一个数代表这个面有多少顶点
如4 0 1 2 3,代表有四个顶点,後面的四个数字是4个顶点的index
一行中最後面的4个数代表RGBA的资讯,这4个数可有可无
现在问题是我不知道该怎麽读取这个档案好:
1)我用scanner去读,用readline读最前面的注解,像这样:
int vertexCount;
int faceCount;
int edgeCount;
String line = "";
while ((line = scanner.nextLine()) != null) {
if (line.startsWith("OFF"))
continue;
else if (line.startsWith("#"))
continue;
else {
String count[] = new String[3];
count = line.split(" ");
vertexCount = Integer.parseInt(count[0]);
faceCount = Integer.parseInt(count[1]);
edgeCount = Integer.parseInt(count[2]);
break;
}
问题是8 6 12这行不一定是用一个空白分开的,可能是用好几个空白分开,
或是最前面也有空白," 8 6 12",这样用nextInt比较好,但是在readline之前
我又不知道这行是不是注解。所以该如何读取这行?
2) 在读取面的资讯时,我用nextInt读取,但是我不知道如何判断这个档案会不会包含
RGBA的资讯,就是不知道一行到底会有多少数字,该如何解决?
问题很多,谢谢你的耐心
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 123.255.103.185
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/java/M.1427601479.A.02C.html
1F:推 swallowcc: split with space, get array length 03/29 12:02
2F:→ j19951102: 忘了说,面的资讯间的空格也可能是不止一个空白 03/29 12:08
3F:→ Expsun: regex? 03/29 12:10
4F:推 swallowcc: split以後把长度 > 0 的拿出来,或者上楼上说的更简单 03/29 12:12
5F:→ swallowcc: 像 03/29 12:13
6F:→ j19951102: 我试试regex,没有用过 03/29 12:49
7F:推 haha02: 一行读进来之後先trim然後再用\\s+做split试试? 03/31 22:31
8F:推 k47100014: 如果遇到很多空白的我会用回圈+取代 04/12 18:07
9F:→ k47100014: s = s.replaceAll("__","_"); //底线为空格 04/12 18:09
10F:→ k47100014: 然後再用split去隔开 04/12 18:09