uniquejava / blog

My notes regarding the vibrating frontend :boom and the plain old java :rofl.
Creative Commons Zero v1.0 Universal
11 stars 5 forks source link

假名转换 #261

Open uniquejava opened 5 years ago

uniquejava commented 5 years ago

It seems like there are several JavaScript solutions online to convert from Kanji, Romaji, Hiragana and Katakana. Check these out and see if they work for you:

来源: https://stackoverflow.com/questions/39830530/how-to-translate-japanese-kanji-to-katakana

uniquejava commented 5 years ago

最简单的库, 源码最易参考: https://github.com/Pomax/node-jp-conversion

Cyper实战, 我写的工具类

class KanaUtils {
    // prettier-ignore
    static final hiragana = [" ぁあぃいぅうぇえぉお",
      "かがきぎくぐけげこご",
      "さざしじすずせぜそぞ",
      "ただちぢっつづてでとど",
      "なにぬねの",
      "はばぱひびぴふぶぷへべぺほぼぽ",
      "まみむめも",
      "ゃやゅゆょよ",
      "らりるれろ",
      "ゎわゐゑを",
      "んゔゕゖ",
      "わ゛ゐ゛ゑ゛を゛"].join('');

  // all kata glyphs
  static final katakana = [" ァアィイゥウェエォオ",
      "カガキギクグケゲコゴ",
      "サザシジスズセゼソゾ",
      "タダチヂッツヅテデトド",
      "ナニヌネノ",
      "ハバパヒビピフブプヘベペホボポ",
      "マミムメモ",
      "ャヤュユョヨ",
      "ラリルレロ",
      "ヮワヰヱヲ",
      "ンヴヵヶ",
      "ヷヸヹヺ"].join('');

  static String convertToKatakana(String str) {
    var sb = StringBuffer();
    for (var i = 0; i < str.length; i++) {
      int index = hiragana.indexOf(str[i]);
      if (index >= 0) {
        sb.write(katakana[index]);
      } else {
        sb.write(str[i]);
      }
    }
    return sb.toString();
  }

  static bool isAllKatakana(String str) {
    for (var i = 0; i < str.length; i++) {
      if (!katakana.contains(str[i])) {
        print('$i: ${str[i]}');
        return false;
      }
    }

    return true;
  }
}

void main() {
  var kana = KanaUtils.convertToKatakana('ありがどうごさぃ');
  print(kana);
  print(KanaUtils.isAllKatakana(kana));
}