最近在做智能音响的服务器的时候,遇见了一个小的问题,我对音响说33元钱,第三方的服务器给我返回了一个三十三的中文,这样我服务器做解析处理的时候比较尴尬,于是自己想了写一个解析中文汉字的方法。
思路:首先先举例几个汉字,三十三,四十四,五百四十二,六万三千二百。经过仔细侦察发现了一个规律,就是第二位的十,百,千,都是单位,也就是说三十三等于 3*10+3
刚好是33 四十四也是如此。六万三千二百则是 6*10000+3*1000+2*100
发现这个规律后则就知道代码怎么写了。写完之后发现 三千零二百
中间多了一个零。得在加一层判断,像一,二,三,四之类的则可以直接使用。上具体代码
checkIsNum(str) {
let ChineseItem = ['零','一', '二', '三', '四', '五', '六', '七', '八', '九','十','百','千','万','两']; //十,百
let numItem = [0,1, 2, 3, 4, 5, 6, 7, 8, 9,10,100,1000,10000,2];
let doubleNum =[]
let NumIndex = []
for (let i = 0; i < str.length; i++) {
let ChineseOne = str.charAt(i);
for (let j = 0; j < ChineseItem.length; j++) {
if (ChineseOne == ChineseItem[j]) {
let a = {
index: j,
seat: i
}
NumIndex.push(a)
}
}
}
let double=[];
let float=[];
let Num=0;
for(var k=0;k<NumIndex.length;k++){
if(NumIndex[k].index == 0){
}else{
if(k%2 == 0){ //单数
float.push(numItem[NumIndex[k].index])
}
if(k%2 == 1){
double.push(numItem[NumIndex[k].index])
}
}
}
if(double.length == 0){
Num = float[0]
}
for(var j=0;j<double.length;j++){
if(double.length<float.length){
if(float[j] == 0){
}else{
Num = Num + double[j]*float[j]
if(j == double.length-1 && j<float.length){
if(float[j+1]>10){
Num = Num * float[j+1]
}else{
Num = Num + float[j+1]
}
}
}
}else if(double.length == float.length){
if(float[j]==0){
Num = Num + double[j]*float[j+1]
}else{
Num = Num + double[j]*float[j]
}
}
}
console.log(Num)
}
如有优化的地方,大佬们可以评论一下。提醒下小弟。
该方法主要是用于一段话然后把这一段话中的数字给提取出来变成数字。
比如:我今天要去买一包二十二块钱的辣条,并且还要花八十八去大保健 手动滑稽
运行后就可以把这段话中的:二十二变成22,八十八变成88。