和文らこらこ文
import java.util.ArrayList;
import java.util.HashMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 和文らこらこ変換ライブラリ
*/
public class Lacolaco
{
private static HashMap<String, String> jaLc;
private static HashMap<String, String> lcJa;
/**
* 与えられた文字列がらこらこ文を含むかどうかを返す
* @param lc 判定する文字列
* @return らこらこ文を含むならtrue,そうでなければfalse
*/
public static boolean isLacolaco(String lc)
{
Pattern pattern = Pattern.compile("[らこ]+");
Matcher matcher = pattern.matcher(lc);
ArrayList<String> list = new ArrayList<String>();
while(matcher.find())
{
list.add(matcher.group());
}
if(list.size() <= 1)
{
return false;
}
else
{
for(String s: list)
{
if(!s.equals("らこ") && !s.equals("ら") && !s.equals("こ"))
{
return true;
}
}
return false;
}
}
/**
* 和文らこらこをカタカナ・数字に復元する *
* @param str 復元したい文字列
* @return 復元部分が置換された文字列
*/
public static String lcToJa(String str)
{
String[] strArr = toRightLacolaco(str).split("~");
StringBuilder sb = new StringBuilder();
for (String tok : strArr)
{
sb.append(lcJa.containsKey(tok) ? lcJa.get(tok) : tok);
}
return sb.toString();
}
/**
* ひらがな・カタカナ・数字をらこらこ文に変換する
* @param str 変換したい文字列
* @return 変換部分が置換された文字列
*/
public static String jaToLc(String str)
{
StringBuilder sb = new StringBuilder();
for (int i = 0; i < str.length(); i++)
{
String tok = String.valueOf(str.charAt(i));
if(jaLc.containsKey(tok))
{
sb.append(jaLc.get(tok));
sb.append("~");
}
else
{
sb.append(tok);
}
}
return sb.toString().trim();
}
private static String toRightLacolaco(String str)
{
str = str.replace("~", "~").trim();
Pattern pattern = Pattern.compile("[^らこ~][らこ]");
StringBuilder sb = new StringBuilder(str);
Matcher matcher = pattern.matcher(str);
while(matcher.find())
{
int i = matcher.start();
sb.insert(i + 1, "~");
matcher.reset(sb);
}
pattern = Pattern.compile("[らこ][^らこ~]");
matcher = pattern.matcher(sb);
while(matcher.find())
{
int i = matcher.start();
sb.insert(i + 1, "~");
matcher.reset(sb);
}
return sb.toString();
}
static
{
jaLc = new HashMap<String, String>();
lcJa = new HashMap<String, String>();
String[][] ja2 = {{"らこ", "イ"}, {"らこらこ", "ロ"}, {"こららら", "ハ"}, {"こらこら", "ニ"}, {"こらら", "ホ"},
{"ら", "ヘ"}, {"ららこらら", "ト"}, {"ららこら", "チ"}, {"ここら", "リ"}, {"らららら", "ヌ"},
{"こらここら", "ル"}, {"らこここ", "ヲ"}, {"こらこ", "ワ"}, {"らこらら", "カ"}, {"ここ", "ヨ"},
{"こら", "タ"}, {"こここ", "レ"}, {"こここら", "ソ"}, {"らここら", "ツ"}, {"ここらこ", "ネ"},
{"らこら", "ナ"}, {"ららら", "ラ"}, {"こ", "ム"}, {"ららこ", "ウ"}, {"らこららこ", "ヰ"},
{"ららここ", "ノ"}, {"らこららら", "オ"}, {"らららこ", "ク"}, {"らここ", "ヤ"}, {"こららこ", "マ"},
{"こらここ", "ケ"}, {"ここらら", "フ"}, {"ここここ", "コ"}, {"こらこここ", "エ"}, {"らこらここ", "テ"},
{"ここらここ", "ア"}, {"こらこらこ", "サ"}, {"こらこらら", "キ"}, {"こららここ", "ユ"}, {"こらららこ", "メ"},
{"ららこらこ", "ミ"}, {"ここらこら", "シ"}, {"らここらら", "ヱ"}, {"ここららこ", "ヒ"}, {"こららこら", "モ"},
{"らこここら", "セ"}, {"こここらこ", "ス"}, {"らこらこら", "ン"}, {"らら", "゛"}, {"ららここら", "゜"},
{"らここらこ", "ー"}, {"らこらこらこ", "、"}, {"こらここらこ", "("}, {"らこららこら", ")"}, {"らここここ", "1"},
{"ららこここ", "2"}, {"らららここ", "3"}, {"ららららこ", "4"}, {"ららららら", "5"}, {"こらららら", "6"},
{"ここららら", "7"}, {"こここらら", "8"}, {"ここここら", "9"}, {"こここここ", "0"}, {"", ""}};
for(String[] pr : ja2)
{
lcJa.put(pr[0], pr[1]);
jaLc.put(pr[1], pr[0]);
}
String[][] ja1 = {{"い", "らこ"}, {"ィ", "らこ"}, {"ぃ", "らこ"}, {"ろ", "らこらこ"}, {"は", "こららら"},
{"に", "こらこら"}, {"ほ", "こらら"}, {"へ", "ら"}, {"と", "ららこらら"}, {"ち", "ららこら"},
{"り", "ここら"}, {"ぬ", "らららら"}, {"る", "こらここら"}, {"を", "らこここ"}, {"わ", "こらこ"},
{"ヮ", "こらこ"}, {"ゎ", "こらこ"}, {"か", "らこらら"}, {"ヵ", "らこらら"}, {"よ", "ここ"},
{"ョ", "ここ"}, {"ょ", "ここ"}, {"た", "こら"}, {"れ", "こここ"}, {"そ", "こここら"},
{"つ", "らここら"}, {"ッ", "らここら"}, {"っ", "らここら"}, {"ね", "ここらこ"}, {"な", "らこら"},
{"ら", "ららら"}, {"む", "こ"}, {"う", "ららこ"}, {"ゥ", "ららこ"}, {"ぅ", "ららこ"},
{"ゐ", "らこららこ"}, {"の", "ららここ"}, {"お", "らこららら"}, {"ォ", "らこららら"}, {"ぉ", "らこららら"},
{"く", "らららこ"}, {"や", "らここ"}, {"ャ", "らここ"}, {"ゃ", "らここ"}, {"ま", "こららこ"},
{"け", "こらここ"}, {"ヶ", "こらここ"}, {"ふ", "ここらら"}, {"こ", "ここここ"}, {"え", "こらこここ"},
{"ェ", "こらこここ"}, {"ぇ", "こらこここ"}, {"て", "らこらここ"}, {"あ", "ここらここ"}, {"ァ", "ここらここ"},
{"ぁ", "ここらここ"}, {"さ", "こらこらこ"}, {"き", "こらこらら"}, {"ゆ", "こららここ"}, {"ュ", "こららここ"},
{"ゅ", "こららここ"}, {"め", "こらららこ"}, {"み", "ららこらこ"}, {"し", "ここらこら"}, {"ゑ", "らここらら"},
{"ひ", "ここららこ"}, {"も", "こららこら"}, {"せ", "らこここら"}, {"す", "こここらこ"}, {"ん", "らこらこら"},
{"ガ", "らこらら らら"}, {"が", "らこらら らら"}, {"ギ", "こらこらら らら"}, {"ぎ", "こらこらら らら"}, {"グ", "らららこ らら"},
{"ぐ", "らららこ らら"}, {"ゲ", "こらここ らら"}, {"げ", "こらここ らら"}, {"ゴ", "ここここ らら"}, {"ご", "ここここ らら"},
{"ザ", "こらこらこ らら"}, {"ざ", "こらこらこ らら"}, {"ジ", "ここらこら らら"}, {"じ", "ここらこら らら"}, {"ズ", "こここらこ らら"},
{"ず", "こここらこ らら"}, {"ゼ", "らこここら らら"}, {"ぜ", "らこここら らら"}, {"ゾ", "こここら らら"}, {"ぞ", "こここら らら"},
{"ダ", "こら らら"}, {"だ", "こら らら"}, {"ヂ", "ららこら らら"}, {"ぢ", "ららこら らら"}, {"ヅ", "らここら らら"},
{"づ", "らここら らら"}, {"デ", "らこらここ らら"}, {"で", "らこらここ らら"}, {"ド", "ららこらら らら"}, {"ど", "ららこらら らら"},
{"バ", "こららら らら"}, {"ば", "こららら らら"}, {"ビ", "ここららこ らら"}, {"び", "ここららこ らら"}, {"ブ", "ここらら らら"},
{"ぶ", "ここらら らら"}, {"ベ", "ら らら"}, {"べ", "ら らら"}, {"ボ", "こらら らら"}, {"ぼ", "こらら らら"},
{"パ", "こららら ららここら"}, {"ぱ", "こららら ららここら"}, {"ピ", "ここららこ ららここら"}, {"ぴ", "ここららこ ららここら"}, {"プ", "ここらら ららここら"},
{"ぷ", "ここらら ららここら"}, {"ペ", "ら ららここら"}, {"ぺ", "ら ららここら"}, {"ポ", "こらら ららここら"}, {"ぽ", "こらら ららここら"},
{"ヴ", "ららこ らら"}};
for(String[] to : ja1) jaLc.put(to[0], to[1]);
}
}