2017-11-05 16 views
3

文字列をJavaで分割しようとしていますが、改行文字は配列の要素として保持しています。 "Hello \n\n\nworld!"空白で文字列を区切りますが、分割配列に改行を入れてください

は、私は出力になりたい::入力と例えば

、これは私に句読点を取得
String[] parsed = input.split(" +|(?=\\p{Punct})|(?<=\\p{Punct})");

["Hello", "\n", "\n", "\n", "world", "!"]

私は今の場所に持っている正規表現はこれです分離が必要ですが、出力は次のようになります。
["Hello", "\n\n\nworld", "!"]

aw Javaで改行を解除するにはどうしたらいいですか?

+0

splitの代わりにfindメソッドを使用します。ルックアラウンドとの戦いよりも、あなたが望むアイテムを定義する方が簡単です。 –

答えて

1

\nをすべて\n(改行と空白)に置き換えてから、スペース文字を単純に分割することができます。

String input = "Hello \n\n\nworld!"; 
    String replacement = input.replace("\n", "\n "); 
    String[] result = replacement.split(" "); 
  • 入力:"Hello \n\n\nworld!"
  • 交換:"Hello \n \n \n world!"
  • 結果:["Hello", "\n", "\n", "\n", "world!"]

注:私の例では、最終的な感嘆符を処理しない - あなたが既に知っていると思われる方法それを処理する。

+0

結果は次のようになります:["Hello"、 "\ n"、 "\ n"、 "\ n"、 "world!]] – jibrahim

+0

これはシンプルでエレガントなソリューションです。自分でそれを考えなかった!どうもありがとうございました。 – Alynchos

+0

@Alynchos心配しないでください。それは普通です:私たちがコードを書くとき、私たちはすべて時々細部にこだわっています。しかし、他の誰かが私たちのコードを見て、彼らは問題の新鮮なunopinionatedビューを持っています。 – TmTron

2

トリックは、各 "\ n"の後ろに空白を追加して、正規表現を適用することです。

String line = "Hello \n\n\nworld!"; 
    line = line.replaceAll("\n", "\n "); // here we replace all "\n" to "\n " 
    String[] items = line.split(" +|(?=\\p{Punct})|(?<=\\p{Punct})"); 

or shorter version: 

    String line = "Hello \n\n\nworld!"; 
    String[] items = line.replaceAll("\n", "\n ").split(" +|(?=\\p{Punct})|(?<=\\p{Punct})"); 

ので、この文脈での結果は次のとおりです。[ "こんにちは"、 "\ n" は、 "\ n" は、 "\ n" は、 "世界"、 "!"]

0

使い方あなたは、Java 7を使用している場合

String str = "Hello \n\n\nworld!"; 
List<String> myList = new ArrayList<String>(); 

Pattern pat = Pattern.compile("\\w+|\\H"); 
Matcher m = pat.matcher(str); 

while (m.find()) { 
    myList.add(m.group(0)); 
} 

[\\S\\n]\\Hを変更します。方法は、物事が容易になります見つけます。

このアプローチを使用すると、ルックアラウンドを使用する必要がないため、パターンの作成と編集が容易になります。

関連する問題