2012-03-21 20 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

スペースを分割し、最初の2つの単語から必要に応じて句読点を取り除き、長さ。正規表現を使ってんのポイント。

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+)$ 

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

関連する問題