OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

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

  • 困ってます
  • 質問No.207840
  • 閲覧数2731
  • ありがとう数1
  • 気になる数0
  • 回答数4
  • コメント数0

お礼率 52% (72/136)

お世話になります、

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

このままデータをStringTokenizerクラスを使用して取得した場合りんごは("りんご")のようにダブルクオートがついた状態で取得されてしまいます。
ダブルクオートを取り外す方法またはメソッドを教えていただきたいのですが、よろしくお願いします。
通報する
  • 回答数4
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.2
レベル8

ベストアンサー率 60% (21/35)

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

その他の回答 (全3件)

  • 回答No.1
レベル10

ベストアンサー率 37% (64/169)

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

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


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


  • 回答No.3

StringTokenizerクラスのコンストラクタの引数には、区切り文字を指定できます。 次のような、感じです。 (ソース中に"(ダブルクォート)を書いたので見にくくなってすみません) String str = "\"This\",\"is\",\"a\",\"test\"" ...続きを読む
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クラスの説明に記載されているソースを一部改変しました)
  • 回答No.4
レベル11

ベストアンサー率 47% (160/334)

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

 このクラスには,quoteChar(int ch) というメソッドがあって,ch で指定した文字を引用符として解釈してくれます。この指定をしたあと,java.io.StreamTokenizer#nextToken() を使って次のトークンを読み込むと,<ch で指定した文字>の直後から,次に<ch で指定した文字>が現れる直前までを一つの文字列として読み込むことができます。
このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ