2013-06-14 2 views
1

속성의 깊이를 결정하는 선행 공백의 수와 함께 계층 적 텍스트 파일을 구문 분석하고 각 수준에 대해 Java 개체 세트를 반환해야합니다. 나는 스캐너를 사용하거나 개별적으로 각 라인을 읽는 것에 대해 생각했지만 그것은 성가신 것처럼 보였다. 아마도 정규 표현식이 더 나은 해결책일까요? 내가 좋아하는 외모를 읽을 필요 파일 :각 필드의 앞에 공백이있는 계층 적 텍스트 파일 읽기

workarea = workarea: 
    size = (1583, 805, 0) 
    areas = areas: 
    place = array: 2 items 
     0 = int: 0 
     1 = int: 0 
    size = (1583, 805, 0) 
    areas = array: 2 items 
     0 = object: 
     type = myType: 
      prop1 = prop1 
      prop2 = array: 2 items 
      0 = object: 
       prop1 = prop1 
       prop2 = prop2 
      1 = object: 
       prop1 = prop1 
       prop2 = prop2 
     position = (5, 5, 0) 
     size = (735, 226, 0) 
     1 = object: 
     type = myType2: 
      prop1 = prop1 
      prop2 = array: 2 items 
      0 = object: 
       prop1 = prop1 
       prop2 = prop2 
      1 = object: 
       prop1 = prop1 
       prop2 = prop2 
      prop3 = prop3 
     position = (5, 5, 0) 
     size = (735, 226, 0) 

당신이 거기에 정의 된 "영역"개체는 다음 특정 유형의 "객체"(myType1 및 myType2)와 5 선 아래 채워진 볼 수 있듯이. 이러한 하위 객체의 각각은 (예에서 myType2이 prop3을 가지고 다른 객체의 배열을 포함 할 수있다.), 서로 다른 특성을 가지고

자바 객체의 그룹으로이 구조를 얻을 수있는 가장 좋은 방법이 될 것입니다 무엇 : 예

Workarea 
public String size = "1583,805" 
public List<Areas> = (
     {Area 
     public String type = "myType" 
     Public String prop1 = prop1 
     etc.... 
     }, 
     {Area 
     public String type = "myType2" 
     Public String prop1 = prop1 
     etc.... 
     } 
) 
+0

외부 구문 분석 라이브러리를 사용할 여력이 있습니까? – fge

+0

외부에서 당신은 비 자바를 의미합니까? 그렇다면 아니오. 하지만 자바라면 아무런 문제가 없습니다. 너 마음에 무엇이 있었 니? –

+0

자바입니다. 제가 생각한 것은 [Parboiled] (https://github.com/sirthias/parboiled/wiki)였습니다. 문법은 Java로 작성되었으며 필요에 따라 다른 객체를 생성하기 위해 빌더를 밀거나 팝하는 데 사용할 수있는 스택이 있습니다 – fge

답변

0

두 개의 getValue 및 getValues ​​(Regex 및 전달 된 파일 내용과 일치하는 값의 배열 및 반환) 메소드를 사용하여 파서 클래스를 작성했습니다. 내가 사용하는 정규식은 파서 클래스라고 내가 원했던 파일의 각 섹션에

(?<=STRING_BEFORE_VAULE)(.*)(?=STRING_AFTER_VALUE_UTIL_EOF\\s*) 

이었다.

도움 주셔서 감사합니다.