0

この問題の適切な解決策が見つかりません:

最後の値をコンマで区切った値のリストを持つ .csv ファイルがあります。これらの値を変数に代入しようとすると、最初の行の最後の値が 2 番目の行の最初の値を理解します。「,\n*」で試してみましたが、うまくいきません。

よろしくお願いします。

コード:

Scanner inputStream = new Scanner(file).useDelimiter(",\\n*");

CSV ファイル:

トムソン、アルフレッド、NY、00192838、USA

ヴィンセント、ランブレ、PA、0033928283、フランス

私が得るもの:

variable5 = 米国 ヴィンセント

私が取得したいもの:

variable5 = 米国

variable6 = ヴィンセント

4

3 に答える 3

1

BufferedReader を使用してファイルを 1 行ずつ読み取り、メイン ループ内で StringTokenizer を使用して BufferedReader readLine メソッドが取得した 1 行をトークン化します。

于 2013-03-09T18:54:55.727 に答える
0

*を削除してください。次のコードは動作するようです

    String testpat = "abc,de\n\nasdfs,fffs,\nslsll\nss";
    Scanner scanner = new Scanner(testpat).useDelimiter(",\\n");

パターンに注意してください \n ではありません \n*

于 2013-03-09T18:57:48.460 に答える
0

あなたのパターンでは、コンマまたは行末の組み合わせが必要です。ここでの最善の方法は、交代のある非キャプチャ グループです。CRLF の組み合わせを考慮する必要がない場合は、文字クラスが機能する可能性がありますが、それは必ずしも適切な仮定ではありません。

これが例です。私は Clojure を使用して Java API を駆動しています。Clojure に慣れていなくても、少し時間をかければ要点を理解できるはずです。セミコロンの後のビットはコメントです。

; define a function that will return a scanner on user input 
; with a given pattern
user=> (defn scanner [input delimiter] 
           (-> (java.util.Scanner. input) (.useDelimiter delimiter)))
#'user/scanner

; define the input
user=> (def input "Thomson,Alfred,NY,00192838,USA\nVincent,Ramblè,PA,0033928283,FRANCE")
#'user/input

; create the scanner 
;     (:?) is a non capturing group
;     the | in the middle tells the group to look for a or b
;     first alternative is a comma 
;     second alternative is a newline followed by 0 or 1 
;     carriage returns.
;     The javadoc for the java.util.Pattern class really helps
user=> (def myscanner (scanner input "(:?,|\n\r?)"))
#'user/myscanner

; quick/dirty way to call next on the scanner 10 times and print 
; the result of each call
user=> (dotimes [n 10] (println (.next myscanner)))
Thomson
Alfred
NY
00192838
USA
Vincent
Ramblè
PA
0033928283
FRANCE

しかし、本当に CSV を実行したい場合、この問題は何度も解決されています。CSV の奇抜な部分を処理するライブラリはたくさんあります。例http://commons.apache.org/proper/commons-csv (これはほんの一例です。使用する前に評価する必要があります)。

幸運を!

于 2013-03-09T20:08:51.887 に答える