2012-03-21 2 views
0

저는 문장의 끝에있는 물음표를 포함하여 문장에서 처음 2 단어와 마지막 단어를 유지하고 싶습니다.문장에서 처음으로 2 단어와 마지막 단어를 유지하십시오.

위트레흐트에서 술을 마셔도 되겠습니까?

문장이 3 개 단어 긴 경우 그것은 또한 작동합니다

로 설정해야합니다. 그래서

위는 위트레흐트를 드래그하는?

(가) 같은

는 상관없이 내가, 내가 몇 문자 또는 아무것도를 찾아 무엇을하려고 누군가가 도움의 손길을 줄 수 없었다 유지해야합니까? 정규식에 대한 좋은 책이 있지만 여름까지는 시간이 없다 : (

+1

왜 당신이 무엇을 시도했다 우리에게 보여? :) –

+1

"단어"와 "문장"을 정의하십시오. –

+1

다시 말하지만, 정규 표현식이 적합하지 않은 ** ** ** 정규 문자열 처리 방법을 사용하면 더 나은 결과를 얻을 수 있습니다. –

답변

2

사용이 정규 표현식을 사용할 수있는 적절한 장소가 아니다.

Java에서이 작업을 수행하는 올바른 방법은 BreakIterator을 사용하여 "Words"를 탐지하고 논리에 따라 처리하는 것입니다. 문자를 그냥 분할하면 모든 언어에서 의미 상 정확하지 않을 수도 있습니다.

인쇄 첫번째 요소 :

public static void printFirst(BreakIterator boundary, String source) { 
    int start = boundary.first(); 
    int end = boundary.next(); 
    System.out.println(source.substring(start,end)); 
} 

인쇄 마지막 요소 :

public static void printAt(BreakIterator boundary, int pos, String source) { 
    int end = boundary.following(pos); 
    int start = boundary.previous(); 
    System.out.println(source.substring(start,end)); 
} 
+0

정말 멋지다. 나는 이것을 장래의 프로젝트에 기억해야한다 :) 나는 한 번 textAnalyser를 만들었으며, 이것으로 잘되어 있었을 것이다. 그래, BreakIterator는 정규식을 사용하고 그렇지 않다면 어떤 점이 좋을까요? – clankill3r

+0

나는 그것이 어떻게 작동하는지에 대한 근원을 보지만, "바보"정규 표현식보다 로케일과 유니 코드를 더 잘 알고있다. –

0

공백으로 분리하고 첫 번째 두 번째 단어부터 필요에 따라 구두점을 제거하고 길이. 정규식을 사용하여 아무 문제.

4

이 시도 ... String.split()

String s = "wie ging er ook alweer allemaal mee wat drinken in Utrecht?"; 
String words[] = s.split(" "); 
String firstTwo = words[0] + " " + words[1]; // first two words 
String lastOne = words[words.length - 1]; // last one 
+0

멋진 고마워요. – clankill3r

1

정규식 용액

^((?:\w+\s+){2}).*?(\S+)$ 
,617 :

public static void printLast(BreakIterator boundary, String source) { 
    int end = boundary.last(); 
    int start = boundary.previous(); 
    System.out.println(source.substring(start,end)); 
} 

인쇄 지정된 위치에있는 요소

$1$2

교체는보기 그것을 here on Regexr

관련 문제