[問題] 如何讀取不確定數量的檔案內容

作者: j19951102 (j19951102)   2015-03-29 11:57:55
我現在要讀取.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的資訊,就是不知道一行到底會有多少數字,該如何解決?
問題很多,謝謝你的耐心
作者: swallowcc (guest)   2015-03-29 12:02:00
split with space, get array length
作者: j19951102 (j19951102)   2015-03-29 12:08:00
忘了說,面的資訊間的空格也可能是不止一個空白
作者: Expsun (無限燃燒)   2015-03-29 12:10:00
regex?
作者: swallowcc (guest)   2015-03-29 12:12:00
split以後把長度 > 0 的拿出來,或者上樓上說的更簡單像
作者: j19951102 (j19951102)   2015-03-29 12:49:00
我試試regex,沒有用過
作者: haha02 (來人!上夾棍!)   2015-03-31 22:31:00
一行讀進來之後先trim然後再用\\s+做split試試?
作者: k47100014 (MIT_No.14)   2015-04-12 18:07:00
如果遇到很多空白的我會用迴圈+取代s = s.replaceAll("__","_"); //底線為空格然後再用split去隔開

Links booklink

Contact Us: admin [ a t ] ucptt.com