• ベストアンサー

文字列からダブルクオートの削除

お世話になります、 CSVからデータを取得してDBに書き込む処理を行っているのですが、CSVデータで型が文字のものはダブルクオート(")でくくっています。 (例) "りんご",100,"円" "ばなな",200,"ドル" このままデータをStringTokenizerクラスを使用して取得した場合りんごは("りんご")のようにダブルクオートがついた状態で取得されてしまいます。 ダブルクオートを取り外す方法またはメソッドを教えていただきたいのですが、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • akinori_s
  • ベストアンサー率60% (21/35)
回答No.2

以前作成した1行文字列をフィールド分割する関数ソースを載せておくので 参考にしてください。 もっといい方法があるのかもしれませんが、とりあえずここでは 一文字ずつ呼んでダブルクオートを削除し、又ダブルクオート内の カンマはそのまま文字として使用するようにしてます。 面倒だったので文字内にダブルクオートを使用することは考慮に入れてません(^^; ArrayList parsLine(String line){  ArrayList fields = new ArrayList();  if(line == null) return;  boolean isQuort = false; //ダブルコーテーション内フラグ  StringBuffer field = null;  for(int i=0;i<line.length();i++){   char code = line.charAt(i);   if(isQuort){ //ダブルクオート内    if(code == '\"'){     isQuort = false;    }    else{     if(field == null) field = new StringBuffer();     field.append(code);    }   }   else{ //ダブルクオート外    if(code == '\"'){     isQuort = true;    }    else if(code == ','){     if(field == null) field = new StringBuffer();     fields.add(field.toString());     field = null;    }    else{     if(field == null) field = new StringBuffer();     field.append(code);    }   }  }  if(field != null){   fields.add(field.toString());  }  return fields; }

その他の回答 (3)

  • aton
  • ベストアンサー率47% (160/334)
回答No.4

 基本的には#3のkana-tanさんの方法でうまくいくと思うのですが,".." の中に ',' を含むような複雑な文字列を処理したい場合は,java.io.StreamTokenizer クラスを利用すると良いと思います。  このクラスには,quoteChar(int ch) というメソッドがあって,ch で指定した文字を引用符として解釈してくれます。この指定をしたあと,java.io.StreamTokenizer#nextToken() を使って次のトークンを読み込むと,<ch で指定した文字>の直後から,次に<ch で指定した文字>が現れる直前までを一つの文字列として読み込むことができます。

参考URL:
http://java.sun.com/j2se/1.3/ja/docs/ja/api/java/io/StreamTokenizer.html
noname#99638
noname#99638
回答No.3

StringTokenizerクラスのコンストラクタの引数には、区切り文字を指定できます。 次のような、感じです。 (ソース中に"(ダブルクォート)を書いたので見にくくなってすみません) String str = "\"This\",\"is\",\"a\",\"test\"";     StringTokenizer st = new StringTokenizer(str,"\","); while(st.hasMoreTokens()){      System.out.println(st.nextToken());   } 結果は This is a test と表示されます。 (APIドキュメントのStringTokenizerクラスの説明に記載されているソースを一部改変しました)

  • yuji
  • ベストアンサー率37% (64/169)
回答No.1

一般的かどうかはわかりませんが、 私の場合は jakartaのOROライブラリ(正規表現ライブラリ) を使って置換しています。 Perlと同じようにsコマンドで置換できます。 outStr = perl.substitute("s/\"//g", inStr); みたいな感じ。 正規表現ライブラリの使い方については JavaWorld 2001/4月号にも載っています。

参考URL:
http://jakarta.apache.org/oro/index.html

関連するQ&A