質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

置換

置換とは文字列中の特定の文字に対して、別の文字列に置き換えることを指します。

Q&A

解決済

3回答

7659閲覧

【Java】普通とは異なる半角スペースを置換する方法

zer0

総合スコア24

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

置換

置換とは文字列中の特定の文字に対して、別の文字列に置き換えることを指します。

1グッド

0クリップ

投稿2017/03/01 07:08

Javaで半角スペースを置換する方法を教えてください。

添付画像の上段の20というのが普段利用する半角スペースです。
今回は下段の e2 80 a8 というバイトコードの半角スペースを通常の半角スペースに置き換える方法がわからず困っています。

イメージ説明

もし分かる方がおられましたらJavaで上記の問題を解決するコードの書き方を教えて頂けますと幸いです。

文字コードはUTF8の場合を想定した質問です。

どうぞよろしくお願いいたします。

KiyoshiMotoki👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

java

1public class Main { 2 3 public static void main(String[] args) { 4 5 String test = "Hello\u2028World!"; 6 System.out.println(test); 7 8 String replaced = test.replace('\u2028', ' '); 9 System.out.println(replaced); 10 11 } 12}

実行結果

Hello
 World! Hello World!

参考
http://utf8-chartable.de/unicode-utf8-table.pl?start=8192&number=128
|U+2028| |e2 80 a8|LINE SEPARATOR|
||||

投稿2017/03/01 07:45

KiyoshiMotoki

総合スコア4791

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

zer0

2017/03/01 15:16

ありがとうございます。 String replaced = test.replace('\u2028', ' '); こちらで見事に置換することができました。 その他にもエラーになる文字列があることがわかりましたので共有させて頂きます。 http://php-tips.com/%E3%83%A1%E3%83%A2/2009/11/%E3%83%A1%E3%83%A2-u2029%E3%81%8C%E5%90%AB%E3%81%BE%E3%82%8C%E3%82%8Bjson%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92eval%E9%96%A2%E6%95%B0%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%83%87%E3%82%B3%E3%83%BC その他にも回答頂いた皆様ありがとうございました。
KiyoshiMotoki

2017/03/02 00:29

zer0様 ご報告ありがとうございます。 私も勉強させていただきました。
guest

0

Java

1int[] codePoints = new int[1]; 2codePoints[0] = 0x2028; 3String space = new String(codePoints, 0, 1);

Unicode コードポイントを使えば何とかなるかも

投稿2017/03/01 07:46

編集2017/03/01 08:01
abs123

総合スコア1280

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KSwordOfHaste

2017/03/01 08:35

UTF8でエンコードされたバイト列をそのまま並べてもそれはcodepointではありません。codepointはKiyoshiMotokiさん回答にあるようにU+2028(intの値として0x2028)になります。
abs123

2017/03/01 08:38

動かしてみたら、Character#isValidCodePoint()で引っかかっていたので、 ひそかに修正済みです。
KSwordOfHaste

2017/03/01 09:59

> 修正済み 了解です! しかしunicodeの基本ページにある文字なので結局はcodepointを持ち出す必要はなく、普通にchar/String(=UTF16)として扱える点にもご注意を。つまり"\u2028"と直接書けます。
guest

0

クラス Pattern

\xe2 が e2 の文字にマッチします。

投稿2017/03/01 07:19

Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KSwordOfHaste

2017/03/01 08:33

質問はU+00e2ではなくUTF8のエンコードとしてのe2 80 a8の文字(U+2028)のことをいっているのでその点を勘違いされていると思います。 Javaのコード上は「文字=char」はUTF16です。正規表現上\xe2は\u00e2ですので本件とは別の文字('â')を指すものになってしまいます。
Zuishin

2017/03/01 10:27

なるほど。確かに私が間違えています。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問