Index > テキストファイル中の「ひらがな」「数字」等について、全角から半角に置き換えたい(Java)
Thu, February 5, 2009

テキストファイル中の「ひらがな」「数字」等について、全角から半角に置き換えたい(Java)

年に一回くらいしか使う必要が生じないのだが、 必要なときに手元になく、いつも過去ソースコードの山をかき分けて探していたので、 ブログにメモしておきます。

ZenToHan.java

import java.io.*;

public class ZenToHan {
  static final String zenkaku 
   = " !”#$%&’()*+,−./"
   + "0123456789"
   + ":;<=>?@"
   + "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
   + "[¥]^_`"
   + "abcdefghijklmnopqrstuvwxyz"
   + "{|}〜";

  static final String ascii
   = " !\"#$%&'()*+,-./"
   + "0123456789"
   + ":;<=>?@"
   + "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
   + "[\\]^_`"
   + "abcdefghijklmnopqrstuvwxyz"
   + "{|}~";

  public String processString(String original){
    char ch;
    int pos;
    for (int i = 0; i < original.length(); ++i){
      ch = original.charAt(i);
      if ((pos = zenkaku.indexOf(ch)) != -1){
        original = original.replace(ch, ascii.charAt(pos));
      }
    }
    return original;
  }

  private static final String ENC="UTF-8";
  public static void main(String[] args) throws Exception{
      if( args.length==2 ){

          File inf=new File(args[0]);
          File outf=new File(args[1]);

          PrintWriter pw=new PrintWriter(new OutputStreamWriter(new FileOutputStream(outf),ENC));
          BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream(inf),ENC));

          String line=null;

          while( (line=br.readLine())!=null ){
            pw.println( new ZenToHan().processString(line) );
          }

          br.close();
          pw.close();
      }
  }
}

このコードは、岩谷氏の Javaによるテキスト処理入門 を参考に書いたと思います、たぶん。

使い方

ZenToHan.java をダウンロードして、 以下のようにjavacする。

$  javac ZenToHan.java -encoding UTF-8

※日本語が直接ソースに入れてあるのでエンコーディングに注意。

対象となるテキストファイルが foo.txt だとすると・・・

$ java ZenToHan foo.txt r.txt

※foo.txt は UTF-8 でエンコードされている必要がある。(ソースを直せばShiftJIS,EUCJPにも対応可能)

r.txt に結果が保存される。

以上

 Twitter
follow me on Twitter
 Categories