码迷,mamicode.com
首页 > 其他好文 > 详细

华为上机练习题--将英文号码翻译成数字号码

时间:2014-07-06 09:24:44      阅读:229      评论:0      收藏:0      [点我收藏+]

标签:java   华为   算法   解决方案   

题目:

 * 将 电话号码 one two 。。。nine zero 翻译成1  2 。。9 0
 *
 * 中间会有double
 *
 * 例如
 *     输入:OneTwoThree
 *     输出:123
 *     输入:OneTwoDoubleTwo
 *     输出:1222
 *     输入:1Two2
 *     输出:ERROR
 *     输入:DoubleDoubleTwo
 *     输出:ERROR


分析:对于字符串的操作有一个比较好用的方法就是replaceAll(),有了这个方法我们可以轻松的将英文翻译成数字, 剩下的事就是判断非法的问题,这个可以使用正则表达式,不过请原谅楼主渣渣的正则表达式(之后楼主一定会狠狠的恶补正则表达式的), 万谢!


代码如下:

package com.wenj.test;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 *
 * @author wenj91-PC
 *
 */

public class TestTranslateTelNum {

    public static void main(String args[]) {
        String strIn = "OneTwoDoubleTwo";
        TestTranslateTelNum tt = new TestTranslateTelNum();
        System.out.println(tt.translateTelNum(strIn));
    }

    public String translateTelNum(String strIn){
        String strTemp = strIn;
        String[] strArr = {"One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Zero", "Double"};
        String[] strNum = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "#"};
        
        Pattern p = Pattern.compile("\\DoubleDouble|\\d|\\p{Punct}");//如果存在双double/[0-9]/其他字符则直接返回ERROR
        Matcher m = p.matcher(strTemp);
        if(m.find()){
            return "ERROR";
        }
        
        for(int i=0; i<strArr.length; i++){
            strTemp = strTemp.replaceAll(strArr[i], strNum[i]);
        }
        
        char[] sC = strTemp.toCharArray();//这是后来添加的,修正之前存在的问题
        for(int i=0; i<sC.length; i++){
            if(‘#‘ == sC[i]){
                if(i == sC.length-1)    //如果double处于末尾位置说明也是错误的
                    return "ERROR";
                sC[i] = sC[i+1];          //将double换成double所修饰的数
            }
        }
        strTemp = "";//这里建议用StringBuffer
        for(int i=0; i<sC.length; i++){
            strTemp+=sC[i];
        }
    
        p = Pattern.compile("[a-zA-Z]");//如果还存在[a-zA-Z]说明输入的时候有误,还是返回ERROR
        m = p.matcher(strTemp);
        if(m.find()){
            System.out.println(strTemp);
            return "ERROR";
        }
        
        return strTemp;
    }
}


华为上机练习题--将英文号码翻译成数字号码,布布扣,bubuko.com

华为上机练习题--将英文号码翻译成数字号码

标签:java   华为   算法   解决方案   

原文地址:http://blog.csdn.net/wenj91/article/details/37049443

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!