- ベストアンサー
文字列の置換について。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
ああ、そういうことでしたか。 それなら、単純なreplaceでは対応できません。 御自身でお書きの通り、splitは単純に分割するもので、ダブルクォートの外とか中とかを考慮しません。 replaceも同様に、外と中を考慮しません。 先にreplaceすれば、splitで分割できなくなるし、先にsplitを先にすれば、ダブルクォートの中のカンマでも分割され、そのあとreplaceしようにもカンマ自体がありません。 ダブルクォートで囲まれた範囲を別に処理する必要があります。 「java csv パーサ」で検索してみてください。
その他の回答 (3)
- teketon
- ベストアンサー率65% (141/215)
単独で機能しているのならば、どこかで処理が間違っている可能性が大です。 EclipseやNetBeansのようなIDEのデバッグモードを使用したり、 Sysytem.out.println()を埋め込むなりして、想定結果と異なる箇所を特定しましょう。 稀に機能しないなど、偶発的なものなら間違っている箇所を特定することは困難ですが、 ほぼ機能していないならば、最初から最後までの処理を読めばいいだけなので、特定は容易な方です。
補足
アドバイスどうもありがとうございます。 エラーが出るのは、生データをいじって中身がおかしくなっていたようです。 改めて試したのですが 出力は出来ますが、 while((line = in.readLine()) != null) { 配列line = line.split(","); で、半角カンマ区切りで読み込んでますので 配列ごとに先に分割されてしまうようですので リプレイス等で、半角カンマを置換できずに 配列ごとに分割されてしまうようです。 Sysytem.out.println()の実行結果ですと 例 実行前 "あいう,えお" ,かきくけこ 実行後 "あいう えお" かきくけこ のようになってしまいます。
- kmee
- ベストアンサー率55% (1857/3366)
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;} バーティカルバー区切りにしてもダメです。 全体のプログラムに問題があるのでしょうか。 現状は半角カンマを全角カンマに修正してから テキスト入出力しています。 もう少し色々試してみます。
- kmee
- ベストアンサー率55% (1857/3366)
具体的にどうやったのですか? http://docs.oracle.com/javase/jp/6/api/java/lang/String.html#replace%28char,%20char%29 http://docs.oracle.com/javase/jp/6/api/java/lang/String.html#replace(java.lang.CharSequence,%20java.lang.CharSequence) http://docs.oracle.com/javase/jp/6/api/java/lang/String.html#replaceAll(java.lang.String,%20java.lang.String) どれでもできそうですけど
補足
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(","," ");のようにして反応がありません。 その他の文字は置換できます。
関連するQ&A
- 文字列に含まれているダブルクォーテーション( ")を置換する
文字列に含まれているダブルクォーテーションを除きたいのですが、これをSubstitute関数で置換しようとしてもうまくいきません。ダブルクォーテーションが文字列を指定するために使われるせいだと思うのですが、"を文字列として指定する方法はあるのでしょうか? よろしくお願いします。
- ベストアンサー
- その他(インターネット・Webサービス)
- 正規表現:囲われた文字列の置換
シングルクオーテーションで囲われた文字列のシングルクオーテーションの前に文字を追加するように、正規表現を用いて置換しようと考えています。 全角文字は[^\x01-\x7E]で検索できるのはわかったのですが、シングルクオーテーションで囲われて、全角文字を含む場合という表現ができません。 下記のような、文字列を対象としています。置換をするのは、全角文字を含む文字列のみです。 全角文字のみ 半角文字のみ 全角半角文字両方 下記ののように置換したいです。 置換前: '全角文字や半角文字','testです','test'.'テスト'.'てすとtest','123' 置換後: A'全角文字や半角文字',A'testです','test'.A'テスト'.A'てすとtest','123' よろしくお願いします。
- ベストアンサー
- その他(プログラミング・開発)
- EXCELでの置換でコーテーションを残す方法
どなたか教えて下さい。 EXCELの置換(「編集」-「置換」)で文字列の置換は出来るのですが、 ” :ダブルコーテーション から ’ :シングルコーテーション に置換したいのですが、その場合、セルの先頭のシングルコーテーションが文字列の始まりと捕らえられ消えてしまいます。 これをそのまま残す方法はありますか?
- ベストアンサー
- オフィス系ソフト
- ダブルクォーテーションが置換できません
いつもお世話になっております。 PHP初心者です。 シングルクォーテーションとダブルクォーテーションを文字列として入力したいと思い、以下のように記述しました。 -------------------------------------------------- $naiyo = $_POST['naiyo']; $search = array('\'','"'); $replace = array('\'\'','\"'); $naiyo2 = str_replace($search,$replace,$naiyo); -------------------------------------------------- シングルクォーテーションは置換された(文字列として表示された)のですが、ダブルクォーテーションは表示されず、ダブルクォーテーション以下の文字列が消えてしまいます。 置換ができていないというよりも、そもそもダブルクォーテーションが検索に引っかかってもいないようです。 どのようにすればダブルクォーテーションも置換できるか、お分かりの方がいらっしゃいましたらご教示ください。 よろしくお願いいたします。
- 締切済み
- PHP
- {0>と<0}ではさまれた文字列の置換
Word文書中で、記号{0>と<0}にはさまれた1文字以上の文字列を、これらの記号も含めて半角スーペスに一括置換する方法を教えてください。Wordのバージョンは、2003です。たとえば、 私の名{0>前は山<0}田太郎です。 上記の文なら、置換後は下記のようになって欲しいのです。 私の名 田太郎です。 なお、{0>と<0}の記号自体は置換できないが、はさまれた文字列をスペースに変換することならできる、という回答でも歓迎いたします。つまり、 下記のようになります。 私の名{0> <0}田太郎です。
- ベストアンサー
- オフィス系ソフト
- VBAの文字列の中に”(全角のダブルコーテーション)を使う
VBAのStringの中に”(全角のダブルコーテーション)を使おうとしているのですが、VisualBasicEditorにより自動的に ""(半角のダブルコーテーション2つ)に変換されてしまいます。 Dim str as String str = "abc”def" ↓ str = "abc""def" 文字列中に全角のダブルコーテーションを使う方法を教えてください。よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- c言語の文字、また文字列について
c言語の文字、つまり「'(シングルクオーテーション)」で囲んだ単数の半角文字は、メモリに保存されているのでしょうか。 また、アドレスは有るのでしょうか。 c言語の文字列、つまり「"(ダブルクオーテーション)」で囲んだ複数の文字は、メモリに保存されているのでしょうか。 また、アドレスは有るのでしょうか。
- 締切済み
- C・C++・C#
- エクセルのマクロで文字の置換について
エクセルのマクロを使った文字の置換についてお聞きしたことがありましす。 やりたいイメージは例として添付の画像としてアップしましたが、 ・エクセルシートに英数文字列の表がある(例では2行2列ですが、実際は6行48列ぐらいです) ・その表を各英数文字列の間に半角カンマ","を入れて、メモ帳に貼り付けたい ※実際メモ帳に貼り付ける動作は手動で行うので、クリップボード上で「各英数文字列 の間に半角カンマ","が入っている状態」で構いません。 ・各英数文字列の最初の2文字は必ず"0a"、その後の英数字は3桁または4桁です。 ちなみに、エクセルシートで英数文字列の表をそのままコピーしてメモ帳でペーストすると 各英数文字列の間にスペース(空白)が入ってしまいます。 その後、メモ帳で置換などを使い半角カンマ","を入れてもいいのですが、そこまでをマクロで行いたいと思っております。 上記のことがそもそもエクセルのマクロで出来るかどか分かりませんが、なにか有用な方法がございましたらご教授お願い致します。 ※使用OS:Windows7、エクセルバージョン:2007
- ベストアンサー
- その他MS Office製品
お礼
java csv パーサで調べてやってみます。 本来配列以外で、カンマが入る場合は 配列の区切り自体|(バーティカルバー)区切りにしてもらうと こうした問題がおきなくて管理しやすいのですが… どうもありがとうございました。