2017-05-16 14 views
3

私のプログラムは、後処理が必要なファイルからいくつかの文字列を読み込みます。ファイルの元のテキストが文字列内の複数の文字を切り抜く

^は私が証明するために使用されるスペース文字である
A1DY^ 
BLKSS^ 
"GH67^"^ 

のように見えます。あなたが見ることができるように、ファイル内のすべての単語はスペースで終わります。いくつかの単語は二重引用符で囲まれています。私はこれらの文字列を私のプログラムに保存したい

A1DY 
BLKSS 
GH67 

つまり、すべてのスペースと二重引用符を切り詰めたいと思います。 str.trim();を使用すると、最後のスペースが削除されます。したがって、3行目は"GH67^"になります。私も二重引用符をトリミングするためにstr.replaceAll("^\"|\"$", "");を使用しました。結果は​​です。つまり、私は再びそれをトリミングする必要があります。

すべてのスペースと二重引用符を一度に削除する方法はありますか?私は英数字を抽出したくないことに注意してください。私は特殊文字を整えたい。

+0

これは機能しますか? https://stackoverflow.com/questions/1805518/replacing-all-non-alphanumeric-characters-with-empty-strings –

+0

英数字を抽出します。ファイルに 'DS-DK ^'がある場合、 'DS-DK'を保存します。 – mahmood

+0

'\ 0'が文字として使用されることはないので、スペースの代わりに '\ 0'を使用すると便利です。 – AppWriter

答えて

3

これはあなたの文字列の先頭や末尾から引用符または任意の数のスペースをトリミングします:あなたの質問の記述の厳密な解釈で

str = str.replaceAll("^[ \"]+|[ \"]+$", ""); 
+2

一般的な初心者ミスを防ぐために、 'str ='を前に追加してください。 – Andreas

+0

技術的には、先頭のスペースを削除することはOPの要件に反するが、それはおそらく違いはない。 – Andreas

+0

@アンドレアスあなたはそれをどこで見ていますか? – shmosel

0

を、あなただけのスペースをリードしていない、削除末尾スペースが欲しいですタブ(\t)のような他の空白文字は含みません。

また、厳密なトリミング機能は、先頭と末尾のペアの両方が見つかった場合、二重引用符を除去し、そして唯一のそのような設定されます。

二重引用符が存在する場合、二重引用符内の末尾のスペースも削除する必要があります。

はすべてのことを達成するために、厳密に は、単一の正規表現操作で、次の操作を行います。

str = str.replaceFirst("^(\"?)(.*?) *\\1 *$", "$2"); 

この正規表現は、それが唯一の文字列全体にマッチ確保するために^$アンカーを使用しています。

主要"はオプション、および存在する場合、キャプチャグループ1と一致しています。 "をリードする場合は、末尾"のみが一致しているマッチした、と末尾"が一致した場合"をリードすることにのみ一致しています。これは、オプションの先導"への逆参照で\1を使用して行われます。一致した場合、結果から削除されます。

なし先頭のスペースが削除されていないが、前及び/又は任意の後続"後の任意の末尾のスペースが削除されています。除去されない

ものはグループ2に取り込まれ、置換文字列に保持されます。

関連する問題