1

次のような入力ファイルを取得しようとしています。

SomeElement1|SomeElementWithDifferentLength2|SomeElement3|AnElementI'llIgnore4|Something5| Element1|DifferentLength2|Element3|AnElementI'llIgnore4|Element5|

そして、特定の間隔で列にフォーマットします。私はJavaが初めてで、C++のバックグラウンドを持っています。とにかく、正規表現でパターンを確立してから、一致を探していました。特定の文字(パイプ「|」)を識別するための正規表現の構文がわからないので、パターンを判断できます。

これは良いアプローチのように思えますか? もしそうなら、Pattern.compile("Regex syntax") の構文は何であり、それとの一致をどのように判断しますか?

4

5 に答える 5

3

最も簡単なことは次のようになると思います。

  1. 各行を String.split("|") で配列に変換します

  2. 各列の長さを持つ int の配列を作成します

  3. 再フォーマットされた行を保持する StringBuilder を作成します

  4. 1 行目の配列をループし、2 行目の配列の長さまで各文字列をパディングしてから、StringBuilder に追加します。

フィールドにパイプが埋め込まれている可能性があり、それらをエスケープするメカニズムが必要な場合は、split() の代わりに、自分で列を解析するコードを記述する必要があります。そのための正規表現を書くこともできると思いますが、パイプを探して文字をループするだけでなく、より多くの作業になると思います。

于 2012-07-23T15:17:24.380 に答える
1

単に String.split()を使用しないのはなぜですか? 例えば

String[] res = line.split("\\|");

(split()メソッドは正規表現を取るので、パイプをエスケープする必要があることに注意してください)。

次に、結果の配列を反復処理し、String.format()を使用してパディング/フォーマットなどで出力できます.

于 2012-07-23T15:15:30.310 に答える
0

String.split(String regex) メソッドを使用できます。

于 2012-07-23T15:17:25.760 に答える
0

ファイルの内容を文字列として読み取ることができる場合は、次のいずれかを実行できます。

  • 「|」を直接置き換えます 特定の数のスペースを使用:stringContents.replaceAll("\\|", " ")

  • 文字列を「|」で分割します。stringContents.split("\\|");

「|」を思い出してください。は正規表現の特殊文字であり、「OR」演算として解釈されます。そのため、円記号 (つまり、2 つの円記号) でエスケープする必要があります。

于 2012-07-23T15:19:56.823 に答える
0

車輪を再発明しないでください。Apache Commons Langを使用し、StringUtils を確認します。

固定長の列が必要だと思います。このライブラリは leftPad() または rightPad() メソッドに加えて、その他の String 操作のヒープを提供します。

要するに:

  1. を使用して分割String.split()
  2. 配列をループし、次を使用して再フォーマットしますStringUtils
于 2012-07-23T15:21:12.287 に答える