看板 java 關於我們 聯絡資訊
我現在要讀取.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://www.ptt.cc/bbs/java/M.1427601479.A.02C.html
swallowcc: split with space, get array length 03/29 12:02
j19951102: 忘了說,面的資訊間的空格也可能是不止一個空白 03/29 12:08
Expsun: regex? 03/29 12:10
swallowcc: split以後把長度 > 0 的拿出來,或者上樓上說的更簡單 03/29 12:12
swallowcc: 像 03/29 12:13
j19951102: 我試試regex,沒有用過 03/29 12:49
haha02: 一行讀進來之後先trim然後再用\\s+做split試試? 03/31 22:31
k47100014: 如果遇到很多空白的我會用迴圈+取代 04/12 18:07
k47100014: s = s.replaceAll("__","_"); //底線為空格 04/12 18:09
k47100014: 然後再用split去隔開 04/12 18:09