アプリ版:「スタンプのみでお礼する」機能のリリースについて

お世話になります、

CSVからデータを取得してDBに書き込む処理を行っているのですが、CSVデータで型が文字のものはダブルクオート(")でくくっています。
(例)
"りんご",100,"円"
"ばなな",200,"ドル"

このままデータをStringTokenizerクラスを使用して取得した場合りんごは("りんご")のようにダブルクオートがついた状態で取得されてしまいます。
ダブルクオートを取り外す方法またはメソッドを教えていただきたいのですが、よろしくお願いします。

A 回答 (4件)

以前作成した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;
}
    • good
    • 0

 基本的には#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 …
    • good
    • 0

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クラスの説明に記載されているソースを一部改変しました)
    • good
    • 1

一般的かどうかはわかりませんが、


私の場合は jakartaのOROライブラリ(正規表現ライブラリ)
を使って置換しています。

Perlと同じようにsコマンドで置換できます。
outStr = perl.substitute("s/\"//g", inStr);
みたいな感じ。


正規表現ライブラリの使い方については
JavaWorld 2001/4月号にも載っています。

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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A