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

题目:

* 将 电话号码 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;

}

}

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

时间: 2024-10-22 00:46:01

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

华为上机练习题--统计各小写字符出现的次数

题目: 手动输入一个字符串,仅限小写字母,统计并输出每个字符在字符串中出现的次数,并输出.提示可以用map 例子:输入:aaabbbccc 输出:a 3 b 3 c 3 分析: 看到后面的提示,简直就是不用动脑,直接简单粗暴的顺势而上 直接上代码: import java.util.Iterator; import java.util.Map; import java.util.Set; import java.util.TreeMap; public class TestCharAcount

华为上机练习题--计算表达式

题目: 输入一个表达式,没有括号,数字小于0-9之间,输出计算结果,所有的中间结果化为整形. 例如:  输入:3+8×2/9-2 输出:2 函数原型 public int getMyRet(String str) 分析: 这个题目略显高端啊, 像我这种非专业的自学者,还真没有学过编译原理之类的课程, 要自己实现一个这种小型的编译器是非常困难啊, 所幸的是这个题目是用java来实现的, 而我本身也曾经看到过用java来实现这类的问题, 这类问题有一种方法就是实现类编译器功能的函数, 这个我是驾驭不

华为上机练习题--重复字符过滤

题目: 请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉. 比如字符串"abacacde"过滤结果为"abcde". 示例 输入:"deefd"        输出:"def" 输入:"afafafaf"     输出:"af" 输入:"pppppppp"     输出:"p" 分析: 看到这种类似的相同字符过滤,使

华为上机练习题--括号匹配检测

题目: 输入一串字符串,其中有普通的字符与括号组成(包括'('.')'.'[',']'),要求验证括号是否匹配,如果匹配则输出0.否则输出1. Smple input:dfa(sdf)df[dfds(dfd)]    Smple outPut:0 分析: 类似于括号字符匹配这类的问题, 我们可以模拟栈的操作来进行验证, 这样问题就简单了, 就是栈的操作 代码如下: package com.wenj.test; import java.util.ArrayList; import java.uti

华为上机练习题--按身高找出最佳二人组

题目: 要从5个人中选取2个人作为礼仪,其中每个人的身高范围为160-190,要求2个人的身高差值最小(如果差值相同的话,选取其中最高的两人),以升序输出两个人的身高. Smple input:161 189 167 172 188 Sample outPut: 188 189 分析:我的理解就是先逆序排好数值, 然后逐对比较身高差值, 找出身高差值最小的然后输出 代码如下: package com.wenj.test; /** * 要从5个人中选取2个人作为礼仪,其中每个人的身高范围为160-

华为上机练习题--求两个数组的总和

题目: 求两个数组的和差:就是去掉两个数组中相同的元素 然后将两个数组中的元素存放在一个新的数组中,且数组A中元素要在B数组元素之前 如:输入: int[] a={1,2,4,7,6,9}; int[] b={2,4,3,10}; 输出: int[] c = {1, 7, 6, 9, 3, 10}; 分析: 剔除相同的元素要互相比较, 然后将不同的元素先后插入新的数组中, 所以我将重点放在比较上, 有可能效率有点低, 大家有什么好的想法可以分享下: 代码如下: package com.wenj.

华为上机练习题--按照新规则排序

题目: * 给定一个数组input[] ,如果数组长度n为奇数, * 则将数组中最大的元素放到 output[] 数组最中间的位置, * 如果数组长度n为偶数, * 则将数组中最大的元素放到 output[] 数组中间两个位置偏右的那个位置上, * 然后再按从大到小的顺序,依次在第一个位置的两边, * 按照一左一右的顺序,依次存放剩下的数. * 例如: *  input[] = {3, 6, 1, 9, 7} *  output[] = {3, 7, 9, 6, 1}; *  input[] =

华为上机练习题--按位取反操作

题目: 求指定位取反后的结果(用异或来进行指定位数的取反) *   输入:0x1234 3 *   输出:0x123c 分析:从网上看到这道题发现蛮有意思的, 记得当时学C语言的时候就有过这种的操作,只不过时间久了就有些健忘, 经过努力追忆后终于想起些些, 现在做出如下总结: *   AND--> & --> AND指令主要用于使操作数若干位不变, 而使某些位为'0'的场合 *   OR --> | --> OR 指令主要用于使操作数若干位不变, 而使某些位为'1'的场合

华为上机练习题--压缩字符串

题目: 通过键盘输入一串小写字母(a~z)组成的字符串.请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串. 压缩规则: 1.仅压缩连续重复出现的字符.比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc". 2.压缩字段的格式为"字符重复的次数+字符".例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz". 要求实现函数: void str