2013-06-12 3 views
1

모든 숫자, 여분의 공백, 대시, 쉼표, 점, 대괄호 등을 제외하고 단어 만있는 일반 텍스트가 필요합니다. 단어 생성 알고리즘 (gamasutra). 나는 정규 표현식이 여기서 도움이 될 수 있다고 생각한다. 어떻게하면 String.split의 도움으로이 작업을 수행 할 수 있습니까?정규식을 사용하여 문자열을 정리하십시오.

UPD :

입력 : 쉼표, 많은 공간, 숫자 - 2 3 4, 대시 : 나는 다른 거기에 물건 1337와 같은 문자열을 가지고있다. 모든 것을 어떻게 제거 할 수 있습니까?

출력 : 그것은 내가 모든 물건을 제거 할 수 있습니다 얼마나 많은 공간의 자리 대시 쉼표에 나는

+0

[자바에서 구두점과 공백 등으로 정규 표현식으로 문자열 나누기] (http://stackoverflow.com/questions/7384791/splitting-strings-through- regularular -expressions-by-punctuation-and-whitespace-etc) –

+1

입력 텍스트와 예상 출력 텍스트가있는 예제를 추가하십시오. – pepuch

답변

2

할 것입니다 서로 다른 재료와 같은 문자열을 사용하면 할 수있다 :

첫 번째 단계는 문자 또는 공백이 아닌 모든 문자를 제거하고 공백으로 대체합니다. 두 번째 단계에서는 하나의 공백으로 여러 공백을 제거합니다.

출력 : 당신이 필요로하는 모든 단어를 포함하는 배열 인 경우

ASD ASD ASD ASD ASD


는 다음이 충분하다 :

String[] words = s.trim().split("[\\W\\d]+"); 
+1

'\ w'도 숫자를 포함하고 있으며, OP도이를 제거하려고합니다. – stema

+0

@stema 제가 수정했습니다. 어쨌든 귀하의 접근 방식은 더 좋습니다 (+1). – assylias

1

내가 두 단계에서는이 방법

str = str.replaceAll("\\s+", " "); 
    str = str.replaceAll("\\p{Punct}|\\d", ""); 
    String[] words = str.split(" "); 
+0

문자에서 숫자를 제거하지 않습니다. – stema

2

유니 코드에 신경 쓰는 분이라면 Unicode properties을 사용하십시오.

String[] result = s.split("\\P{L}+"); 

\p{L}은 모든 언어의 문자에 대한 유니 코드 속성입니다.

\P{L}\p{L}의 부정으로, 문자가 아닌 모든 것을 의미합니다. (나는 그것이 당신이 원하는 것이라고 이해했다.)

관련 문제