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

ダブルコーテーションで囲まれ文字列が
あったとします。
その文字列の中に含まれる半角カンマを
なくしたいのですが、
リプレイスだと反応がありません。
その他の文字は置換出来るのですが。
どなたから、ダブルコーテーションに囲まれた
文字列の中の半角カンマを取り除く方法が
ありましたらアドバイス下さい。
どうぞよろしくお願いします。

A 回答 (4件)

ああ、そういうことでしたか。


それなら、単純なreplaceでは対応できません。
御自身でお書きの通り、splitは単純に分割するもので、ダブルクォートの外とか中とかを考慮しません。
replaceも同様に、外と中を考慮しません。
先にreplaceすれば、splitで分割できなくなるし、先にsplitを先にすれば、ダブルクォートの中のカンマでも分割され、そのあとreplaceしようにもカンマ自体がありません。

ダブルクォートで囲まれた範囲を別に処理する必要があります。
「java csv パーサ」で検索してみてください。
    • good
    • 0
この回答へのお礼

java csv パーサで調べてやってみます。
本来配列以外で、カンマが入る場合は
配列の区切り自体|(バーティカルバー)区切りにしてもらうと
こうした問題がおきなくて管理しやすいのですが…
どうもありがとうございました。

お礼日時:2012/12/19 15:34

単独で機能しているのならば、どこかで処理が間違っている可能性が大です。


EclipseやNetBeansのようなIDEのデバッグモードを使用したり、
Sysytem.out.println()を埋め込むなりして、想定結果と異なる箇所を特定しましょう。

稀に機能しないなど、偶発的なものなら間違っている箇所を特定することは困難ですが、
ほぼ機能していないならば、最初から最後までの処理を読めばいいだけなので、特定は容易な方です。

この回答への補足

アドバイスどうもありがとうございます。
エラーが出るのは、生データをいじって中身がおかしくなっていたようです。
改めて試したのですが
出力は出来ますが、
while((line = in.readLine()) != null) {


配列line = line.split(",");

で、半角カンマ区切りで読み込んでますので
配列ごとに先に分割されてしまうようですので
リプレイス等で、半角カンマを置換できずに
配列ごとに分割されてしまうようです。

Sysytem.out.println()の実行結果ですと

例  実行前 "あいう,えお" ,かきくけこ

    実行後 "あいう
          えお"
          かきくけこ
のようになってしまいます。

補足日時:2012/12/19 10:00
    • good
    • 0

import java.util.regex.*;


class b {
public static void main(String argv[]) {
String c="ab,abc,de";

// 補足にあったコード
String text = new String(c);

Pattern pattern = Pattern.compile(",");
Matcher matcher = pattern.matcher(text);
StringBuffer appStrBuf = new StringBuffer();
while (matcher.find()) {

matcher.appendReplacement(appStrBuf, " ");
}
matcher.appendTail(appStrBuf);

// 単純なreplace
String c0=c.replace(","," ");
String c1=c.replaceAll(","," ");

System.out.println(c);
System.out.println(appStrBuf);
System.out.println(c0);
System.out.println(c1);
}
}


ab,abc,de // もとのcは変化しない
ab abc de // appStrBuf
ab abc de // String.replace
ab abc de // String.replaceAll

となりますけど。

この回答への補足

アドバイスどうもありがとうございます。

単体の実行結果で検証すると半角カンマは置換できます。

半角カンマのままですと、反応しないというより
エラーでテキスト入出力出来ません。
テキスト全体のフィールドごとの区切りを

private static String Sign() {

String Verticalbar = "|";

return commaorVerticalbar;}

バーティカルバー区切りにしてもダメです。
全体のプログラムに問題があるのでしょうか。

現状は半角カンマを全角カンマに修正してから
テキスト入出力しています。
もう少し色々試してみます。

補足日時:2012/12/18 22:12
    • good
    • 0

この回答への補足

String text = new String(c);


Pattern pattern = Pattern.compile(",");
Matcher matcher = pattern.matcher(text);
StringBuffer appStrBuf = new StringBuffer();
while (matcher.find()) {

matcher.appendReplacement(appStrBuf, " ");
}
matcher.appendTail(appStrBuf);

Systemout.print(appStrBuf);

}

のようにして半角カンマをスペースにしたりとか

単純に c.replaceAll(","," ");のようにして反応がありません。
その他の文字は置換できます。

補足日時:2012/12/17 20:37
    • good
    • 0

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