JavaでASCIIの制御文字を置換する3つの方法

java-ascii-control-character
  • URLをコピーしました!

今までJavaに関する記事を投稿したことはありませんが、仕事で少しだけ文字コード変換を行う際に使いましたので、記事にしたいと思います。
何分、Javaに関しては初心者ですので、誤り等ありましたらご指摘の程よろしくお願い致します。
今回はASCII制御文字置換する方法について紹介します。

目次

1. 正規表現を利用した置換方法

特定の文字を単純に指定した文字に置換するだけなら、文字列String)に対してreplaceAll()を利用して1行で済みます。

Stack OverflowにQ&Aがありましたので、そのまま引用しています。

この正規表現p{C}」(先頭のバックスラッシュ””はエスケープです)は、ASCII制御文字である「0x000x1F」を削除します。
詳しい正規表現はこちらをご覧ください。

基本はこれで問題ないです。
しかし、文字コードを細かく指定したい場合は、次の2つの方法が有効です。

2. 1文字ずつ判定して置換する方法

以下のコードは、文字列(String)を1文字ずつループし、文字コードASCII制御文字かどうかを判定して置換します。
最終的に置換後の文字列を返す関数を作って見ました。

コード説明

関数の引数に文字列(String)を渡します。

for文で文字数(str.length())だけループを回します。
あとは、Char型の変数に格納したも文字をif文でASCII制御文字0x000x1F)かどうか判定してStringBuffer変数にappend()していきます。

if分の箇所は自由に指定できるので、自由に置換したい文字コードを指定することができます。
最後は、toString()関数で文字列にして返却します。

3. MatcherとPatternクラスを利用する

もう1つは、JavaMatcherPatternという便利なクラスを利用します。
以下のサンプルは、クラス変数(Pattern)などに置換対象の文字コードを指定し、Matcherクラスを利用して文字列の中から一致した文字をreplaceAll()関数で置換する方法です。

コード説明

クラス変数ASCII制御文字コード範囲を指定します。
そして、matcher()関数の引数に文字列を渡して、変数(Mather)に格納し、最後は1つ目の方法と同じようにreplaceAll()関数を利用して置換して完了です。
こちらが参考サイトです。

情報ありがとうございます!

まとめ

このように、Java文字コード変換をするのが初めてでしたので、様々なサイトを参考にさせていただきました。
その中で「正規表現を使うと処理が遅い」という情報が多かった気がします。
それを踏まえると2番目の変換方法がオススメです。

そして、ASCII制御文字0x7F0x9Fu007fu009f)を含めるかどうかも参考にしたサイトによって異なりました。
1番目のケースで言うと「p{Cc}」のような書き方になります。
この辺りも要件によって異なると思いますので、皆さんのご意見も頂けると幸いです。

著:きしだ なおき, 著:山本 裕介, 著:杉山 貴章
¥3,212 (2024/08/22 04:04時点 | Amazon調べ)
著:中山 清喬, 著:国本 大悟, 著:株式会社フレアリンク
¥2,911 (2024/08/19 09:33時点 | Amazon調べ)
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメント一覧 (1件)

  • […] 前回、JavaでASCIIの制御文字の取り扱いについて記事にしました。 そして今回は、前回の対策を応用して、もっと厄介なサロゲートペア文字をJavaでゴニョゴニョする方法を2つ程ご紹介したいと思います。 JavaでASCIIの制御文字を置換する3つの方法https://minory.org/java-ascii-control-character.html今までJavaに関する記事を投稿したことはありませんが、仕事で少しだけ文字コードの変換を行う際に使いましたので、記事にしたいと思います。何分、Javaに関しては初心者ですので、誤り等ありましたらご指摘の程よろしくお願い致します。初回はASCII制御文字を置換す…Minory […]

コメントする

CAPTCHA


目次