3

split()を使用する場合、正規表現を使用すると、すべての単語文字を保持できますが、保持しないなどの短縮形も保持されます。アポストロフィの両側に単語文字が含まれているものの、「tisまたはdogs」などの先頭または末尾のアポストラフィは削除されます。

私は持っています:

String [] words = line.split("[^\\w'+]+[\\w+('*?)\\w+]");

ただし、先頭と末尾の句読点は保持されます。

の入力'Tis the season, for the children's happiness'.

次の出力を生成します:Tis the season for the children's happiness

何かアドバイス?

4

3 に答える 3

0

私は思うだろう:分割:

  • アポストロフィ+少なくとも1つの非単語文字['-]\\W+
  • または任意の単語文字[^\\w'-]\\W*

    String line = "'Tis the season, for the children's happiness'";
    String[] words = line.split("(['-]\\W+|[^\\w'-]\\W*)");
    System.out.println(Arrays.toString(words));
    

ここでは-、アポストロフィに加えて追加しました。

結果:

['Tis, the, season, for, the, children's, happiness']

開始と終了の追加:

    String[] words = line.split("(^['-]|['-]$|['-]\\W+|[^\\w'-]\\W*)");

結果:

[, Tis, the, season, for, the, children's, happiness]

これは最初は空の文字列を生成します。

于 2012-12-10T00:10:10.970 に答える
0

または、パターンと一致させることもできます。

\w+('\w+)?
于 2012-12-10T01:51:04.563 に答える
0

英語が打たれます。次のコックニーを考えてみましょう。

「ジェーンは、 『ジャック・オー・ランタンを持ったサムの息子、不気味になるだろう』と言った」と双子の幽霊は一斉に言った。

すべての単語は、以下を使用して照合されます。

('?[\p{L}](-[^-])?('-)?(s'(?=\s))?)+

16一致を返します:

" Jane said、' 、!' 'E'll be spookySam's son with the jack-o'-lantern" said the twins' ghosts--- in unison

双子は所有格であり、縮約ではなく、一致していることに注意してください。ただし、Sam'sも所有格ですが、縮約と区別されません---所有格ではないため、慎重に作成された例外句必要です。

これには、幸福のアポストロフィは含まれません。これは、それが最後の一重引用符であるか所有格であるかを判断する簡単な方法がないためです。

私の引用パーサーであるKeenQuotes'を参照してください。これは、まっすぐな引用文字( )をアポストロフィ(')またはカールした一重引用符(‘、 )に変換することで多くのシナリオを処理し’ます。

于 2021-04-18T21:06:10.357 に答える