• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:全角から半角に変換する)

Javaで全角から半角への変換方法とは?

このQ&Aのポイント
  • Javaで文字列の中に全角文字があれば、単純に半角に変換したいです。具体的な変換ルールは、全角ひらがな→半角カタカナ、漢字はそのまま、全角カタカナ→半角カタカナ、半角カタカナはそのまま、半角アルファベットはそのまま、全角アルファベット→半角アルファベット、半角数字はそのまま、全角数字→半角数字、半角記号はそのまま、全角記号→半角記号です。
  • Javaには標準で上記の変換を行うメソッドは存在しません。自作する場合、いくつかのアプローチが考えられますが、最もパフォーマンスが速い方法は、正規表現を使用して一括変換することです。
  • 全角から半角への変換は文字ごとに変換処理を行うため、文字列の長さによってはパフォーマンスの低下が生じる可能性があります。そのため、大量の文字列を変換する場合は、StringBuilderを使用し、一度に変換する方法が効果的です。また、変換ルールに一部例外がある場合は、変換テーブルを使用することも考えられます。

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

  • ベストアンサー
  • maiko0318
  • ベストアンサー率21% (1483/6969)
回答No.1

作るなら。 class liAsc implements ActionListener { public void actionPerformed(ActionEvent agevt) { if(txArea.getSelectionStart() == txArea.getSelectionEnd()) txArea.selectAll(); String Str3 = txArea.getSelectedText(); StringBuffer Str4 = new StringBuffer(""); String StrD1 = "0123456789"; String StrS1 = "0123456789"; String StrD2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; String StrS2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; String StrD3 = "abcdefghijklmnopqrstuvwxyz"; String StrS3 = "abcdefghijklmnopqrstuvwxyz"; String StrD4 = "-+*/!#$%&’()="; String StrS4 = "-+*/!#$%&'()="; String StrD5 = "アイウエオカキクケコサシスセソタチツテトナニヌネノ"; String StrS5 = "アイウエオカキクケコサシスセソタチツテトナニヌネノ"; String StrD6 = "ハヒフヘホマミムメモヤユヨラリルレロワヲン"; String StrS6 = "ハヒフヘホマミムメモヤユヨラリルレロワヲン"; String StrD7 = "ァィゥェォャュョッ"; String StrS7 = "ァィゥェォャュョッ"; String StrD = StrD1 + StrD2 + StrD3 + StrD4 + StrD5 + StrD6 + StrD7; String StrS = StrS1 + StrS2 + StrS3 + StrS4 + StrS5 + StrS6 + StrS7; int j; for(int i = 0; i < Str3.length(); i++) { j = StrS.indexOf(Str3.substring(i, i + 1)); if (j >= 0) Str4.append(StrD.charAt(j)); else Str4.append(Str3.charAt(i)); } txArea.replaceRange(Str4.toString(), txArea.getSelectionStart(), txArea.getSelectionEnd()); } } ※StrS*は半角です。

rio_grande
質問者

お礼

参考になりました。有難うございました。

その他の回答 (1)

  • teketon
  • ベストアンサー率65% (141/215)
回答No.2

TerasolunaのStringUtil.zenkakuToHankaku() 一番しんどい濁音、半濁音を含めた全角から半角への変換をしてくれます。 あとは処理の前にひらがなからカタカナへの変換を入れるだけです。 ただ、対象とする全角記号はチェックしたほうが良いです。特殊記号もありますので。 性能は一文字ずつスキャンする必要があるので、ほぼ上がらないと思います。

参考URL:
http://sourceforge.jp/projects/terasoluna/
rio_grande
質問者

お礼

参考になりました。有難うございました。

関連するQ&A