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 に結果が保存される。
以上