2017-05-17 12 views
0

これを正規表現で動作させようとしていますが、失敗してしまいました。JavaはHTMLレンダラーのように白い空白を減らす

ウェブブラウザがHTML文字列をレンダリングする方法に文字列を近づけるにはどうすればよいですか? 例HTML:

<html> 
    Hel 
lo 
    how 
are you 
</html> 

がレンダリングされる:

Hel lo how are you 

は、私はそれが

Hello how are you 

になりたいので、HTMLとの違いは、明示的なスペースのない改行がちょうど除去されることがあります。 Javaでは、この文字列は次のようになります。私は、改行が続く末尾のスペースといくつかのより多くのテキストとラインを持っている場合は :

\tHel\nlo \n how\n are you 

私の現在のソリューション:

// remove linebreaks and tabs and any leading or trailing whitespace 
// this is necessary to avoid converting \t or \n to a space 
script = script.replaceAll("\\s+\n\\s+", ""); 
script = script.replaceAll("\\s+\t\\s+", ""); 
// remove any length of whitespace and replace it with one 
script = script.replaceAll("\\s+", " "); 
// rewmove leading and trailing whitespaces 
script = script.trim(); 

は一つだけ問題があります、末尾のスペースが削除されます:

Hello \nhow are you? 

01に低減されます

ので、下記のスペースマーカーとしてのアンダースコア(_)を使用することは真である必要があります。

_ = _ 
__ = _ 
\t\n_ = _ 
_\t\n = _ 
\t_\n = _ 
_\t_\n_ = _ 
\n = // nothing 
\t = // nothing 
\t\n = // nothing 

でReplaceAll(正規表現、文字列)をどのような組み合わせで、私が使用する必要があるでしょうか?

+0

あなたは正規表現を探しています。 – SLaks

+3

[Javaの2つ以上のスペースを文字列内の単一スペースで置き換え、先頭のスペースのみを削除する方法](http://stackoverflow.com/questions/2932392/java-how-to-replace-2-or-more) -space-with-string-and-delete-lead) – Berger

+0

.replaceAll( "+"、 "") – mike

答えて

2

が必要と考えています縮減する

Hellohow are you? 

これはsomethiですそれはあなたの必要条件の内在的帰結です。

1

正規表現\sはすべての空白に一致します。

// remove any newlines or tabs (leading or trailing whitespace doesn't matter) 
script = script.replaceAll("(\\\t|\\\n)", ""); 
// boil down remaining whitespace to a single space 
script = script.replaceAll("\\s+", " "); 
script = script.trim(); 

Hello\nhow are you? 

のようなコースの原因何かのこの意志: - あなたの現在の例で与えられた - あなたはこれにあなたの置き換え機能を変更したいので、私はあなただけだと思いmyString.trim().replaceAll("\\s+", " ");

+0

先頭のスペースを1つ残しませんか? – bradimus

+3

本当に、あなたは 'myString.trim()'を最初にやってみることができます。 – dumptruckman

+0

私はすでにそれをそのように試みました。なぜ私はそれが十分でないのか説明する質問を更新しました。スペースとタブ/改行を明示的に区別する必要があります – Pete