2013-06-16 1 views
-1

Wavefront Object 파일의 기본 모델 뷰어를 만들려고합니다. 파일을 읽는 중 일부는 각 줄을 분할하는 것을 포함합니다. 면은 슬래시에 따라 정의됩니다. 다음은 위키 백과에서 구문 분석 할 수있는 얼굴의 다른 유형이 있습니다"/"및 "//"로 문자열을 분할하는 방법은 무엇입니까?

f v1 v2 v3 v4 ... <- Face built of vertices 
    f v1/vt1 v2/vt2 v3/vt3 ... <- Face built of vertices + textures 
    f v1/vt1/vn1 v2/vt2/vn2 v3/vt3/vn3 ... <- Face built of vertices, textures, and normals 
    f v1//vn1 v2//vn2 v3//vn3 ... <- Face built of vertices and normals 

내가 점차적으로 각 라인을 읽어 봤는데, 그것은 "F"로 시작하면, 나는 처음 두를 제거한 후 다른 방법으로 해당 송신 전체 라인의 문자로 얼굴을 만듭니다.

f v1 v2 v3v1 v2 v3

으로 처리됩니다. 슬래시가있는 줄을 처리해야 할 때 적절한 결과를 얻지 못하는 것처럼 잘못 나눕니다. 분할 매개 변수가 일반적으로 사용되는 I는 (내가 생각하는) 문자로 분할하는 것을 시도하고있는 동안 정규식 있어야하기 때문에이 문제를 야기 하는가

string.split("/"); 
    string.split("//"); 

: 저는 현재이 두 분할을 사용하고 있습니다 정규식?

+3

'/'는 Java 정규 표현식에서 특수 문자가 아닙니다. 당신은''\''를 생각하고 있습니다. –

+3

'/'에 의해 처음으로 나눠지면'/ /'구분 기호가 엉망이됩니다; 분할하기 전에 같은 문자열에'/'와'// '가 둘 다 있다고 가정 할 때'/'* before *로 분할해야합니다. –

+2

'내가 제대로 된 결과를 얻지 못해 잘못 분류하고 있다고 생각합니다 .' 현재 결과와 예상 결과를 보여줄 수 있습니까? 질문을 편집하려면 질문 아래의 '편집'버튼을 클릭하십시오. [[edit]]. – Pshemo

답변

0

슬래시는 정규식에서 특별한 것이 아닙니다. 이것을 시도하십시오 :

for (String facePart : input.replaceAll("^f "), "").split(" ")) { 
    String[] data = facePart.split("/"); 
    String vertex = data[0]; 
    String texture = data.length > 1 ? data[1] : ""; 
    String normal = data.length > 2 ? data[2] : ""; 
    // do something with the info 
    // variables will be blank if missing from input 
}