1

String split()メソッドを使用したいcsvファイルがあります。によって返される配列の各要素をsplit()、csv のコンマ区切りの値にしたいと考えています。ただし、csv ファイルには他のカンマがあります。

幸いなことに、これらの他のコンマは次のようにエスケープされます'\,'

split()メソッドの正しい正規表現を取得できません。エスケープ文字が前にないコンマで分割したい。

私の現在のコードは次のとおりです。

String[] columns = new String[CONST];
columns = someString.split("*^\\,*");

私には、これは次のように書かれています:コンマで分割されますが、コンマの前の文字はエスケープ文字であってはなりません。コンマの前後に任意の数の文字を使用できます。

  1. 正しい正規表現を取得するにはどうすればよいですか?
4

3 に答える 3

1

まず、コンマは使用している位置で特別な意味を持たないため、エスケープを省略できます

正規表現の最大の問題は、*単独では何の意味も持たないことです。*前のトークンの出現を意味します。

したがって、正規表現は

.*,.* (コンマをエスケープしても問題ないと思います .*\,.*

次に、使用法について説明します。正規表現を使用していますString.split()String.split()区切り文字の正規表現を期待してください。,したがって、正規表現としてa のみを渡す必要があります。「区切り.*,.*文字」として使用すると、予期しない結果が得られます (試してみてください)。

于 2013-01-21T04:41:11.400 に答える
0

検索でこのページにヒットしたので、記載されているように質問に答え、正しいパターンを入力します (完全を期すために):

columns = someString.split("[^\\\\],");

文字列内に 1 つのエスケープ文字を作成するには 2 つのエスケープ文字が必要なため、4 つのエスケープ文字が必要であることに注意してください。つまり、「\\」は文字列 \ を作成します。したがって、「\\\\」は文字列 \\ を作成し、正規表現でエスケープをエスケープして、正規表現で文字 \ を作成します。したがって、正規表現でエスケープ文字を作成するには、文字列に 4 つのエスケープ文字が必要です。括弧とカラットは、not ステートメントを作成する 1 つの方法です (特に 1 文字の場合)。

分割したくない CSV エントリを引用符で囲むこともできます。次に、次の解決策を使用します: Java: コンマ区切りの文字列を分割しますが、引用符内のコンマは無視します

私の個人的な好みは、私がコーディングしている環境のため、サードパーティのパーサーよりも分割を使用することです.

于 2015-01-14T19:58:49.483 に答える