2013-06-05 3 views
0

'abc \'abc \ ' "123"12 \\'3 '과 같은 문자열이 있습니다.리눅스 터미널과 같이 문자열 분할하기

내가하고 싶은 것은 유닉스 터미널처럼 그것을 분석하는 것이다. 복잡한 regexes를 다루지 않고 이것을 할 수있는 방법이 있습니까?

예 : java -jar foo.jar abc 'abc' "123" 12\'3

문자열 ["abc","abc","123","12'3"]의이 배열 될 것입니다 날이 작업을 수행 할 수 있도록 할 자바에 내장 된 라이브러리/기능의 어떤 종류가 있습니까?

+0

[String.split()] (http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#split (java.lang.String))을 확인 했습니까? 그게 너에게 효과가 있니? – Smit

+0

당신을 위해 그것을 할 수있는 하나의 도서관이 parboiled됩니다. 자바에서 문법을 작성해야하지만 꽤 간단합니다. – fge

+1

@'azek "dd" '\' 'eio \ "\''는 유효한 토큰 (궁극적으로는'azekdd'eio '' '' – fge

답변

1

당신은 자신의 파서를 작성할 수 있습니다 (간단히하기 위해, 문자를 맞추기 위해 Guava와 그 CharMatcher을 사용하는 것이 좋습니다). 또는 기존 파서 라이브러리를 사용하십시오. 내 개인적인 선호는 Parboiled입니다. 문법을 에 쓸 수 있기 때문에입니다. 예를 들어

이 매우 원유 문법 (그러나 내 살짝 데친 - Fu는 조금 녹슨 주) 문자 만 포함 단어로 분할 :

Rule Spaces() 
{ 
    return OneOrMore(AnyOf(" \t")); 
} 

Rule Letter() 
{ 
    return Range('a', 'z'); 
} 

Rule Word() 
{ 
    return OneOrMore(IgnoreCase(Letter()); 
} 

Rule OneLine() 
{ 
    // EOI == End Of Input 
    return Sequence(Optional(Spaces()), Word(), 
     ZeroOrMore(Sequence(Spaces(), Word()), EOI); 
} 

는 등의 값을 밀어 수있는 스택이있다 그 때문에 결국 모든 문자열의 목록을 얻을 수 있습니다.

관련 문제