【kotlin】日文假名的全半角轉(zhuǎn)換

先分享一個(gè)unicode一覽的網(wǎng)址:鏈接
在里面可以找到各個(gè)字符對應(yīng)的unicode對應(yīng)的十六進(jìn)制數(shù)

1、 全角半角檢測

根據(jù)上面的網(wǎng)站称近,使用正則表達(dá)式檢測對應(yīng)的unicode就可以

// 全角
fun String.isFullChar(): Boolean {
    return matches(Regex("^[\\u3040-\\u30FF]+$"))
}

// 半角第队,注意平假名沒有半角
fun String.isHalfChar(): Boolean {
    return matches(Regex("^[\\uFF60-\\uFF9F]+$"))
}

2、 英文和數(shù)字的轉(zhuǎn)換

在上面的網(wǎng)址中刨秆,可以發(fā)現(xiàn)英文和數(shù)字的半角和全角的unicode差值是固定的凳谦。所以可以通過簡單的加減來轉(zhuǎn)換。

//初始的字符串
val org = "" 
//半角轉(zhuǎn)全角
org = org.replace(Regex("[\\u0020-\\u007E]")) {
        (it.value[0] + 0xFEE0).toString()
    }
……
//全角轉(zhuǎn)半角
org = org.replace(Regex("[\\uFF00-\\uFF5E]")) {
        (it.value[0] - 0xFEE0).toString()
    }

3衡未、 假名的轉(zhuǎn)換

假名的轉(zhuǎn)換要復(fù)雜的多尸执,因?yàn)榧倜娜前虢遣钪挡还潭ǎ⑶一捍祝瑵嵋舭霛嵋舻陌虢鞘莾蓚€(gè)字符如失,全角是一個(gè)字符,轉(zhuǎn)換起來會(huì)很麻煩送粱。
參考鏈接

val kanaHanZenTbl = arrayOf(
        // 濁音和半濁音褪贵,必須要放在前面,因?yàn)??要轉(zhuǎn)換的話抗俄,是ガ不是一個(gè)カ加上"
        arrayOf("??", "ガ"), arrayOf("??", "ギ"), arrayOf("??", "グ"), arrayOf("??", "ゲ"), arrayOf("??", "ゴ"),
        arrayOf("??", "ザ"), arrayOf("??", "ジ"), arrayOf("??", "ズ"), arrayOf("??", "ゼ"), arrayOf("??", "ゾ"),
        arrayOf("??", "ダ"), arrayOf("??", "ヂ"), arrayOf("??", "ヅ"), arrayOf("??", "デ"), arrayOf("??", "ド"),
        arrayOf("??", "バ"), arrayOf("??", "ビ"), arrayOf("??", "ブ"), arrayOf("??", "ベ"), arrayOf("??", "ボ"),
        arrayOf("??", "パ"), arrayOf("??", "ピ"), arrayOf("??", "プ"), arrayOf("??", "ペ"), arrayOf("??", "ポ"),
        arrayOf("??", "ヴ"),
        // 單字符的假名
        arrayOf("?", "ア"), arrayOf("?", "イ"), arrayOf("?", "ウ"), arrayOf("?", "エ"), arrayOf("?", "オ"),
        arrayOf("?", "カ"), arrayOf("?", "キ"), arrayOf("?", "ク"), arrayOf("?", "ケ"), arrayOf("?", "コ"),
        arrayOf("?", "サ"), arrayOf("?", "シ"), arrayOf("?", "ス"), arrayOf("?", "セ"), arrayOf("?", "ソ"),
        arrayOf("?", "タ"), arrayOf("?", "チ"), arrayOf("?", "ツ"), arrayOf("?", "テ"), arrayOf("?", "ト"),
        arrayOf("?", "ナ"), arrayOf("?", "ニ"), arrayOf("?", "ヌ"), arrayOf("?", "ネ"), arrayOf("?", "ノ"),
        arrayOf("?", "ハ"), arrayOf("?", "ヒ"), arrayOf("?", "フ"), arrayOf("?", "ヘ"), arrayOf("?", "ホ"),
        arrayOf("?", "マ"), arrayOf("?", "ミ"), arrayOf("?", "ム"), arrayOf("?", "メ"), arrayOf("?", "モ"),
        arrayOf("?", "ヤ"), arrayOf("?", "ユ"), arrayOf("?", "ヨ"), arrayOf("?", "ラ"), arrayOf("?", "リ"),
        arrayOf("?", "ル"), arrayOf("?", "レ"), arrayOf("?", "ロ"), arrayOf("?", "ワ"), arrayOf("?", "ヲ"),
        arrayOf("?", "ン"), arrayOf("?", "ァ"), arrayOf("?", "ィ"), arrayOf("?", "ゥ"), arrayOf("?", "ェ"),
        arrayOf("?", "ォ"), arrayOf("?", "ャ"), arrayOf("?", "ュ"), arrayOf("?", "ョ"), arrayOf("?", "ッ"),
        arrayOf("?", "脆丁。"), arrayOf("?", "「"), arrayOf("?", "」"), arrayOf("?", "、"), arrayOf("?", "?"),
        arrayOf("?", "ー"), arrayOf("", ""), arrayOf("\t", " "), arrayOf("\n", " "), arrayOf(" ", " ")
)

轉(zhuǎn)換的整體思路是动雹,將所有的假名放在二維數(shù)組中槽卫,然后一個(gè)一個(gè)對比,進(jìn)行轉(zhuǎn)換胰蝠。

//擴(kuò)展方法
fun String.halfToFullChar(): String {
    if (!hasHalfChar()) {
        return this
    }
    var org = this
    kanaHanZenTbl.forEach {
        org = org.replace(it[0], it[1])
    }
    //英文數(shù)字
    org = org.replace(Regex("[\\u0020-\\u007E]")) {
        (it.value[0] + 0xFEE0).toString()
    }
    return org
}

這里沒有寫全角轉(zhuǎn)半角的方法歼培,因?yàn)槠郊倜麤]有半角震蒋,所以轉(zhuǎn)換起來可能有問題,不過應(yīng)該可以根據(jù)上面的方法寫出來一個(gè)丐怯。這里就不再寫了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末翔横,一起剝皮案震驚了整個(gè)濱河市读跷,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌禾唁,老刑警劉巖效览,帶你破解...
    沈念sama閱讀 222,681評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異荡短,居然都是意外死亡丐枉,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評論 3 399
  • 文/潘曉璐 我一進(jìn)店門掘托,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瘦锹,“玉大人,你說我怎么就攤上這事闪盔⊥湓海” “怎么了?”我有些...
    開封第一講書人閱讀 169,421評論 0 362
  • 文/不壞的土叔 我叫張陵泪掀,是天一觀的道長听绳。 經(jīng)常有香客問我,道長异赫,這世上最難降的妖魔是什么椅挣? 我笑而不...
    開封第一講書人閱讀 60,114評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮塔拳,結(jié)果婚禮上鼠证,老公的妹妹穿的比我還像新娘。我一直安慰自己靠抑,他們只是感情好名惩,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,116評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著孕荠,像睡著了一般娩鹉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上稚伍,一...
    開封第一講書人閱讀 52,713評論 1 312
  • 那天弯予,我揣著相機(jī)與錄音,去河邊找鬼个曙。 笑死锈嫩,一個(gè)胖子當(dāng)著我的面吹牛受楼,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播呼寸,決...
    沈念sama閱讀 41,170評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼艳汽,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了对雪?” 一聲冷哼從身側(cè)響起河狐,我...
    開封第一講書人閱讀 40,116評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎瑟捣,沒想到半個(gè)月后馋艺,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,651評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡迈套,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,714評論 3 342
  • 正文 我和宋清朗相戀三年捐祠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片桑李。...
    茶點(diǎn)故事閱讀 40,865評論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡踱蛀,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出贵白,到底是詐尸還是另有隱情星岗,我是刑警寧澤,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布戒洼,位于F島的核電站俏橘,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏圈浇。R本人自食惡果不足惜寥掐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,211評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望磷蜀。 院中可真熱鬧召耘,春花似錦、人聲如沸褐隆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽庶弃。三九已至衫贬,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間歇攻,已是汗流浹背固惯。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留缴守,地道東北人葬毫。 一個(gè)月前我還...
    沈念sama閱讀 49,299評論 3 379
  • 正文 我出身青樓镇辉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親贴捡。 傳聞我的和親對象是個(gè)殘疾皇子忽肛,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,870評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 傳送門:排序算法演示小DEMO 前面的話 為了給字符串?dāng)?shù)組排序,除了用C/C++的基本辦法烂斋,iOS開發(fā)者更應(yīng)該學(xué)會(huì)...
    小碼僧閱讀 4,282評論 5 62
  • 一屹逛、是什么? 「全角」和「半角」是指計(jì)算機(jī)中CJK 字符的顯示格式源祈。(讀完全文就可知煎源,這是個(gè)不算太嚴(yán)謹(jǐn)?shù)梢陨约友a(bǔ)...
    有且僅有l(wèi)a閱讀 2,902評論 0 1
  • 1色迂、js 日語全半角轉(zhuǎn)換 客戶的需求是香缺,輸入半角字符或日語假名,篩選出來的結(jié)果顯示包含該字符的半角形式和全角形式的...
    看看你的肥臉閱讀 1,559評論 0 0
  • 對一部敘述大唐由盛轉(zhuǎn)衰三十年間的一部片子歇僧,本是充滿期待图张,加入了妖貓的題材,對情愛诈悍,人性祸轮,幻術(shù)等令整部電影有了更多的...
    白色石南閱讀 185評論 0 1
  • 項(xiàng)目里經(jīng)常會(huì)遇到字典或者字典包含數(shù)組,也許是更復(fù)雜的數(shù)據(jù)結(jié)構(gòu)侥钳,一層層剝離适袜,其實(shí)也可以,但是借助 MJExtensi...
    雪_晟閱讀 781評論 0 1