華為上機練習題--將英文號碼翻譯成數字型大小碼

來源:互聯網
上載者:User

標籤:java   華為   演算法   解決方案   

題目:

 * 將 電話號碼 one two 。。。nine zero 翻譯成1  2 。。9 0
 *
 * 中間會有double
 *
 * 例如
 *     輸入:OneTwoThree
 *     輸出:123
 *     輸入:OneTwoDoubleTwo
 *     輸出:1222
 *     輸入:1Two2
 *     輸出:ERROR
 *     輸入:DoubleDoubleTwo
 *     輸出:ERROR


分析:對於字串的操作有一個比較好用的方法就是replaceAll(),有了這個方法我們可以輕鬆的將英文翻譯成數字, 剩下的事就是判斷非法的問題,這個可以使用Regex,不過請原諒樓主渣渣的Regex(之後樓主一定會狠狠的惡補Regex的), 萬謝!


代碼如下:

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;
    }
}


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.