首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除,然后使用替换在相同索引处添加标点符号

删除,然后使用替换在相同索引处添加标点符号
EN

Stack Overflow用户
提问于 2015-11-29 20:24:56
回答 1查看 67关注 0票数 0

我正在尝试把一个有汉字的句子转换成拼音。

Aka: 你好, 吗? => ni hao, ma?

我最初想去掉句子标点符号,这样我就不需要在字典中浪费循环检查是否相等,但最终希望保留标点符号的位置,并将它们添加回翻译中。

我得到了从中文到拼音的转换,并能够在?末尾添加,但不知道如何替换新句子中的逗号。

代码语言:javascript
复制
/*
  Remove spaces periods, commas, and question marks
*/
function removePunctuation (str) {
  return str.replace(/[.,\? ]/g, '');
}

function convertToPinyin () {
  var cn = chinese_sentence; //你好, 吗?
  var cn2 = removePunctuation(cn); //你好吗
  var cn3 = cn2.split(''); //['你', '好', '吗']
  var pinyin = [];
  for (var i = 0; i < cn3.length; i++) {
    if (cn3[i] in dictionary_json) {
      pinyin.push(dictionary_json[cn3[i]].pinyin);
    }
  }
  // cn = 你好, 吗?
  // replace '你好吗' with 'ni hao ma'
  // get 'ni hao, ma?'

  return cn.replace(cn2, pinyin.join(' '));
}

var pinyin = convertToPinyin();

console.log('pinyin', pinyin); //ni hao ma?
//should get 'ni hao, ma?'
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-29 20:47:37

与其删除标点符号,不如删除空白并将其作为普通字符,然后在字典中首先检查所查看的字符是否不是标点符号:

代码语言:javascript
复制
function convertToPinyin () {
  var cn = '你好, 吗?'; //你好, 吗?
  var cn2 = cn.replace(/\s/g, ''); //你好,吗?  
  var cn3 = cn2.split(''); //['你', ',', '好', '吗', '?']
  var pinyin = [];
  for (var i = 0; i < cn3.length; i++) {
    if(!/[.,\? ]/.test(cn3[i])) // If not punctuation 
    { 
        if (cn3[i] in dictionary_json) // Then convert
            pinyin.push(dictionary_json[cn3[i]].pinyin);
    } else {
        pinyin.push(cn3[i]);
    }
  } 
  return cn.replace(cn2, pinyin.join(' '));
}

这样你就可以保存标点符号所在的位置,同时转换项目,如果它不是汉字,它也不会检查字典。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33987642

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档