convertWithToneNumber static method

List<String> convertWithToneNumber(
  1. String pinyinArrayStr
)

将带声调格式的拼音转换为数字代表声调格式的拼音 @param pinyinArrayStr 带声调格式的拼音 @return 数字代表声调格式的拼音

Implementation

static List<String> convertWithToneNumber(String pinyinArrayStr) {
  List<String> pinyinArray = pinyinArrayStr.split(pinyinSeparator);
  for (int i = pinyinArray.length - 1; i >= 0; i--) {
    bool hasMarkedChar = false;
    String originalPinyin = pinyinArray[i].replaceAll('ü', 'v'); // 将拼音中的ü替换为v
    for (int j = originalPinyin.length - 1; j >= 0; j--) {
      int originalChar = originalPinyin.codeUnitAt(j);
      // 搜索带声调的拼音字母,如果存在则替换为对应不带声调的英文字母
      if (originalChar < 'a'.codeUnitAt(0) ||
          originalChar > 'z'.codeUnitAt(0)) {
        int indexInAllMarked =
            allMarkedVowel.indexOf(String.fromCharCode(originalChar));
        int toneNumber = indexInAllMarked % 4 + 1; // 声调数
        double index = (indexInAllMarked - indexInAllMarked % 4) / 4;
        int replaceChar = allUnmarkedVowel.codeUnitAt(index.toInt());
        pinyinArray[i] = originalPinyin.replaceAll(
                String.fromCharCode(originalChar),
                String.fromCharCode(replaceChar)) +
            toneNumber.toString();
        hasMarkedChar = true;
        break;
      }
    }
    if (!hasMarkedChar) {
      // 找不到带声调的拼音字母说明是轻声,用数字5表示
      pinyinArray[i] = originalPinyin + '5';
    }
  }

  return pinyinArray;
}