/*
* ファイル名 :StringUtil.java
* バージョン :01-00
* タイトル :システム共通 (カナ小文字変換)(カナ氏名チェック)(右側空白削除)
* 説明 :
*/import java.util.HashMap;
/**
* StringUtilクラス<br>
*/
public class StringUtil { /**
* 文字列中の半角カナ小文字を半角カナ大文字に変換します。<br>
* <br>
* 渡された文字列(半角カナ氏名・半角カナ組織名・半角カナ住所)中の半角カナ小文字(ァ,ィ,ゥ,ェ,ォ,ャ,ュ,ョ,ッ,")を半角カナ大文字(ア,イ,ウ,エ,オ,ヤ,ユ,ヨ,ツ,゙)に変換します。<br>
* <br>
* 変換された結果はHashMapに格納されて、値が戻されます。その際のキーは半角カナ氏名が"name"、半角カナ組織名が"organization"、半角カナ住所が"address"となります。
* @param kanaName 半角カナ氏名
* @param kanaOrganization 半角カナ組織名
* @param kanaAddress 半角カナ住所
* @return HashMap 変換結果
* @throws java.lang.IllegalArgumentException 不正な引数、もしくは不適切な引数が渡された場合に例外がスローされます。
*/
public static HashMap toCapitalLetterHanKana( String kanaName, String kanaOrganization,
String kanaAddress) throws IllegalArgumentException{
HashMap hashMap = new HashMap(); //変換後のデータを格納
boolean nullFlag = false; //3つの引数が全てnullであった場合にはfalse、そうでなかった場合にはtrueを格納 //カナ氏名がnullでなかった場合実行
if(kanaName != null){
nullFlag = true;
if(checkFullChar(kanaName) == false){
throw new IllegalArgumentException(); //文字列中に半角文字以外があった場合、
//IllegalArgumentExceptionをスロー
}
hashMap.put( "name", convertCapitalLetter(kanaName)); //変換後カナ氏名を格納
}else{
hashMap.put( "name", null);
}
//カナ組織名がnullでなかった場合実行
if(kanaOrganization != null){
nullFlag = true;
if(checkFullChar(kanaOrganization) == false){
throw new IllegalArgumentException(); //文字列中に半角文字以外があった場合、
//IllegalArgumentExceptionをスロー
}
hashMap.put( "organization", convertCapitalLetter(kanaOrganization)); //変換後カナ組織名を格納
}else{
hashMap.put( "organization", null);
}
//カナ住所がnullでなかった場合実行
if(kanaAddress != null){
nullFlag = true;
if(checkFullChar(kanaAddress) == false){
throw new IllegalArgumentException(); //文字列中に半角文字以外があった場合、
//IllegalArgumentExceptionをスロー
}
hashMap.put( "address", convertCapitalLetter(kanaAddress)); //変換後カナ住所を格納
}else{
hashMap.put( "address", null);
}
if(nullFlag == false){
throw new IllegalArgumentException(); //引数が3つともnullの場合、
//IllegalArgumentExceptionをスロー
}
return hashMap;
}
/**
* 指定カナ氏名を左詰で「姓+1バイト空白+名」に変換します。ただし、指定カナ氏名の文字列間に2箇所以上空白がある場合は空白を全て詰めます。
* また、変換後の文字列が20字を超える場合、先頭から20字分の文字列を戻します。
* @param sourceKanaName 指定カナ氏名
* @return String 成形後カナ氏名
* @throws java.lang.IllegalArgumentException 不正な引数、もしくは不適切な引数が渡された場合に例外がスローされます。
*/
public static String formKanaName(String sourceKanaName) throws IllegalArgumentException{
StringBuffer kanaNameBuffer; //文字列編集用
int lastIndex; //カナ氏名の(文字数-1)を格納
//引数チェック
if(sourceKanaName == null){
throw new IllegalArgumentException(); //引数がnullの場合、
//IllegalArgumentExceptionをスロー
}
kanaNameBuffer = new StringBuffer //半角空白・タブ文字列を1バイト空白に変換し、
(sourceKanaName.replaceAll( "[ /t]+", " ")); //文字列編集用バッファに文字列を格納
if(kanaNameBuffer.toString() == " "){
throw new IllegalArgumentException(); //文字列の文字が全て空白の場合、
//IllegalArgumentExceptionをスロー
}
if(checkFullChar(sourceKanaName) == false){
throw new IllegalArgumentException(); //文字列中に半角文字以外があった場合、
//IllegalArgumentExceptionをスロー
}
//文字列の左右の空白を削除
if(kanaNameBuffer.indexOf(" ") == 0){
kanaNameBuffer.deleteCharAt(0) ; //左側に空白があった場合、空白を削除
}
lastIndex = kanaNameBuffer.length() - 1; //カナ氏名の最後の文字のインデックスを格納
if(kanaNameBuffer.lastIndexOf(" ") == lastIndex){
kanaNameBuffer.deleteCharAt(lastIndex); //右側に空白があった場合、空白を削除
}
if(kanaNameBuffer.toString().matches(".+ .+ .+") == true){
kanaNameBuffer.replace( 0, kanaNameBuffer.length(), //文字列中に2箇所以上空白がある場合
kanaNameBuffer.toString().replaceAll(" ","")); //空白を全て詰める
}
if(kanaNameBuffer.length() >= 20){
kanaNameBuffer.setLength(20); //文字列が20文字を超える場合、先頭から20文字を設定
}
return kanaNameBuffer.toString();
} /**
* 指定された文字列の右側空白(半角空白、全角空白、タブ)を削除します。
* @param targetString 右側空白削除対象文字列
* @return String 空白削除後の文字列
* @throws java.lang.IllegalArgumentException 不正な引数、もしくは不適切な引数が渡された場合に例外がスローされます。
*/
public static String rTrim(String targetString) throws IllegalArgumentException{
StringBuffer targetBuffer; //文字列編集用に文字列を格納
//引数チェック
if(targetString == null){
throw new IllegalArgumentException(); //引数がnullの場合、
//IllegalArgumentExceptionをスロー
}
targetBuffer = new StringBuffer(targetString);
targetBuffer.replace( 0, targetBuffer.length(), //文字列を逆順に並び替え、
targetBuffer.reverse().toString().replaceFirst("[ /t ]+","")); //左側(実際の右側)の空白を削除
return targetBuffer.reverse().toString();
}
/**
* 渡された文字列の英数字カナ半角文字を全角文字にします。
* @param targetString 変換対象文字列
* @return String 変換後の文字列
* @throws java.lang.IllegalArgumentException 不正な引数、もしくは不適切な引数が渡された場合に例外がスローされます。
*/
public static String toFullChar(String targetString) throws IllegalArgumentException{
StringBuffer fullCharStr; //文字列編集用
char fullKana;
//引数チェック
if(targetString == null){
throw new IllegalArgumentException(); //引数がnullの場合、
//IllegalArgumentExceptionをスロー
}
fullCharStr = new StringBuffer(targetString.length()); //変換対象文字数分の文字列編集用バッファを取得
//文字列中の半角英数字カナ文字を全角文字に変換する
for(int i = 0; i < targetString.length(); i++){
if(targetString.substring(i, i+1).matches("[ -~]")){
fullCharStr.append(toFullAlphameric(targetString.charAt(i))); //文字が半角英数字であった場合、
//全角英数字へ変換
}else if(targetString.substring(i, i+1).matches("[。-゚]")){
fullKana = toFullKana(targetString.charAt(i),targetString.charAt(i - 1)); //文字が半角カナであった場合、
//全角カナ文字へ変換
if(fullKana != '゛' && fullKana != '゜' && (targetString.charAt(i) == '゙' || targetString.charAt(i) == '゚')){
fullCharStr.deleteCharAt(fullCharStr.length()-1); //変換対象文字が半角濁点もしくは半角半濁点かつ
//変換後の文字が全角濁点・全角半濁点ではない場合、
//1つ前に格納されている文字を削除
}
fullCharStr.append(fullKana); //変換後の文字列を格納
}else{
fullCharStr.append(targetString.charAt(i - 1)); //対応する全角文字がない場合、変換しないで文字列バッファへ格納
}
}
return fullCharStr.toString();
}
/**
* 文字列中に全角文字が含まれているかをチェックします。全角文字が含まれていない場合にはtrueを、含まれていた場合にはfalseを戻します。<br>
* 文字のUnicodeが0x0020~0x0080、もしくは、0xff61~0xff9fの範囲に含まれていなかった場合に、その文字は全角文字とみなされます。
* @param checkString 全角有無チェック対象文字列
* @return boolean 文字列中に全角文字がなかった場合true、あった場合false
* @throws java.lang.IllegalArgumentException 不正な引数、もしくは不適切な引数が渡された場合に例外がスローされます。
*/
private static boolean checkFullChar(String checkString){
if(!checkString.matches("[ -~。-゚]+")){
return false; //文字のUnicodeが0x0020~0x007e、もしくは、0xff61~0xff9fの範囲(半角文字の範囲)に含まれていなかった場合、
//falseを戻す
}
return true; //文字列中に全角文字が含まれていなかった場合、trueを戻す
}
/**
* 文字列中の半角カナ小文字を半角カナ大文字に変換します。<br>
* <br>
* 渡された文字列中の半角カナ小文字(ァ,ィ,ゥ,ェ,ォ,ャ,ュ,ョ,ッ,")を半角カナ大文字(ア,イ,ウ,エ,オ,ヤ,ユ,ヨ,ツ,゙)に変換し、変換した文字列を戻します。<br>
* @param convertString 変換対象文字列
* @return String 変換後の文字列
* @throws java.lang.IllegalArgumentException 不正な引数、もしくは不適切な引数が渡された場合に例外がスローされます。
*/
private static String convertCapitalLetter(String convertString){
int index;
String before[] = {"ァ","ィ","ゥ","ェ","ォ","ャ","ュ","ョ","ッ","/""}; //変換前の半角カナ小文字を格納した配列
String after[] = {"ア","イ","ウ","エ","オ","ヤ","ユ","ヨ","ツ","゙"}; //変換後の半角カナ大文字を格納した配列
StringBuffer stringBuffer = new StringBuffer(convertString); //文字列編集用
//変換対象となる半角カナ小文字の数だけループ
for( int i = 0; i < 10; i++){
index = 0; //indexを初期化
//文字列中に変換対象となる半角カナ小文字がある間ループ
while(index >= 0){
index = stringBuffer.indexOf( before[i], index); //半角カナ小文字が最初に出現する位置のインデックスを取得
if(index >= 0){
stringBuffer.replace( index, index + 1, after[i]); //半角カナ小文字が見つかった場合
//半角カナ小文字を半角カナ大文字に変換
}
}
}
return stringBuffer.toString();
}
/**
* 半角英数字を全角英数字へ変換します。<br>
* @param targetCharacter 全角英数字への変換対象文字
* @return char 変換後文字
*/
private static char toFullAlphameric(char targetCharacter){
final int E_DIFFERENCE = 0xff01 - 0x0021; //英数字の全角文字と半角文字のUnicodeの差
switch(targetCharacter){
case 0x0020:
return 0x3000; //' '(Unicode:0x0021)を' '(Unicode:0x3000)に変換
case 0x0022:
return 0x201d; //'"'(Unicode:0x0022)を'”'(Unicode:0x201d)に変換
case 0x0027:
return 0x2019; //'''(Unicode:0x0027)を'’'(Unicode:0x2019)に変換
case 0x005c:
return 0xffe5; //'/'(Unicode:0x005c)を'¥'(Unicode:0xffe5)に変換
default:
targetCharacter += E_DIFFERENCE; //上記以外の半角英数字を対応する全角英数字に変換(順に並んでいる為、
//半角英数字と全角英数字の差を半角英数字に加えることで可能)
return targetCharacter;
}
}
/**
* 半角カナ文字を全角カナ文字へ変換します。<br>
* 1つ目の引数は変換の対象となる文字です。<br>
* 2つ目の引数は、変換の対象となる文字の1つ前の文字です。変換の対象となる文字が濁点('゙')もしくは半濁点('゚')であった場合、
* 1つ前の文字を判別し、全角1文字で表現できる場合はそれを使用します。<br>
* <例><br>
* ガ → ガ<br>
* ヴ → ヴ<br>
* ア゙ → ア゛
* @param targetCharacter 全角カナ文字への変換対象文字
* @param beforeTarget 変換対象文字の1つ前の文字
* @return char 変換後文字
*/
private static char toFullKana(char targetCharacter,char beforeTarget){
final char kanaArry[][] = {{'。','。'},{'「','「'},{'」','」'},{'、','、'},{'・','・'}, //半角カナと全角カナの対応表を格納
{'ヲ','ヲ'},{'ァ','ァ'},{'ィ','ィ'},{'ゥ','ゥ'},{'ェ','ェ'},
{'ォ','ォ'},{'ャ','ャ'},{'ュ','ュ'},{'ョ','ョ'},{'ッ','ッ'},
{'ー','ー'},{'ア','ア'},{'イ','イ'},{'ウ','ウ'},{'エ','エ'},
{'オ','オ'},{'カ','カ'},{'キ','キ'},{'ク','ク'},{'ケ','ケ'},
{'コ','コ'},{'サ','サ'},{'シ','シ'},{'ス','ス'},{'セ','セ'},
{'ソ','ソ'},{'タ','タ'},{'チ','チ'},{'ツ','ツ'},{'テ','テ'},
{'ト','ト'},{'ナ','ナ'},{'ニ','ニ'},{'ヌ','ヌ'},{'ネ','ネ'},
{'ノ','ノ'},{'ハ','ハ'},{'ヒ','ヒ'},{'フ','フ'},{'ヘ','ヘ'},
{'ホ','ホ'},{'マ','マ'},{'ミ','ミ'},{'ム','ム'},{'メ','メ'},
{'モ','モ'},{'ヤ','ヤ'},{'ユ','ユ'},{'ヨ','ヨ'},{'ラ','ラ'},
{'リ','リ'},{'ル','ル'},{'レ','レ'},{'ロ','ロ'},{'ワ','ワ'},
{'ン','ン'},{'゙','゛'},{'゚','゜'}};
final char voicedArry[][] = {{'カ','ガ'},{'キ','ギ'},{'ク','グ'},{'ケ','ゲ'},{'コ','ゴ'}, //半角カナと全角カナと全角濁音カナの対応表を格納
{'サ','ザ'},{'シ','ジ'},{'ス','ズ'},{'セ','ゼ'},{'ソ','ゾ'},
{'タ','ダ'},{'チ','ヂ'},{'ツ','ヅ'},{'テ','デ'},{'ト','ド'},
{'ハ','バ'},{'ヒ','ビ'},{'フ','ブ'},{'ヘ','ベ'},{'ホ','ボ'},
{'ウ','ヴ'}};
final char semivoicedArry[][] = {{'ハ','パ'},{'ヒ','ピ'},{'フ','プ'},{'ヘ','ペ'},{'ホ','ポ'}}; //半角カナと全角カナと全角半濁音カナの対応表を格納 //半角カナの種類数分ループさせる
for(int i = 0; i < kanaArry.length; i++){
if(targetCharacter == kanaArry[kanaArry.length - 2][0]){ //文字が濁点('゙')であった場合
//全角濁音カナの種類数分ループさせる
for(int k = 0; k < voicedArry.length; k++){
if(beforeTarget == voicedArry[k][0]){ //対象文字列の半角カナと全角濁音カナ対応表の半角カナが一致した場合
return voicedArry[k][1]; //文字列バッファに全角濁点カナを格納
}
if(k == voicedArry.length -1){ //対応する全角濁音カナがなかった場合
return kanaArry[kanaArry.length - 2][1]; //文字列バッファに全角濁点を格納
}
}
}else if(targetCharacter == kanaArry[kanaArry.length - 1][0]){ //文字が半濁点('゚')であった場合
//全角半濁音カナの種類数分ループさせる
for(int k = 0; k < semivoicedArry.length; k++){
if(beforeTarget == semivoicedArry[k][0]){ //対象文字列の半角カナと全角半濁音カナ対応表の半角カナが一致した場合
return semivoicedArry[k][1]; //文字列バッファに全角半濁点カナを格納
}
if(k == semivoicedArry.length - 1){ //対応する全角半濁音カナがなかった場合
return kanaArry[kanaArry.length - 1][1]; //文字列バッファに全角半濁点を格納
}
}
}else if(targetCharacter == kanaArry[i][0]){
return kanaArry[i][1]; //半角カナを対応する全角カナに変換
}
}
return targetCharacter;
}
}
java半角转换成全角 日语 空格 日文半角文字转换
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
全角半角转换?
见过猪跑,还要吃上猪肉!
全角 半角 搜索