java机试题 华为_华为上机试题(java)

一、题目描述:

通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。

比如字符串“abacacde”过滤结果为“abcde”。

public String stringFilter(String str) {

Map map = new LinkedHashMap();

String s = "";

for(int i=0; i

s = String.valueOf(str.charAt(i));

if(map.keySet().contains(s))

map.put(s, map.get(s)+1);

else

map.put(s, 1);

}

String _str = "";

for(Map.Entry entry : map.entrySet()) {

_str += entry.getKey();

}

return _str;

}

-- 这里要注意,HashMap中元素的遍历顺序,并非按输入顺序,而是按“有利于随机查找的散列(hash)的顺序”。

-- LinkedHashMap 是按加入时的顺序遍历,类似的还有LinkedHashSet。

二、题目描述:

通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。

压缩规则:

1、仅压缩连续重复出现的字符。比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc"。

2、压缩字段的格式为"字符重复的次数+字符"。例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz"。

public String stringZip(String str) {

String _str = "";

int i = 0; //游标位置

char c; //游标字符

while(i

int n = 1; //相邻相同字符的个数

c = str.charAt(i);

for(int j=i+1; j

char _c = str.charAt(j);

if(c==_c) {

n++;

} else {

break;

}

}

if(n==1) {

_str += c;

} else if(n>1){

_str += String.valueOf(n) + c;

}

i += n; //游标位置

}

return _str;

}

三、题目描述:

通过键盘输入100以内正整数的加、减、乘、除运算式,请编写一个程序输出运算结果字符串。

输入字符串的格式为:“操作数1 运算符 操作数2”,“操作数”与“运算符”之间以一个空格隔开。

补充说明:

1、操作数为正整数,不需要考虑计算结果溢出的情况。

2、若输入算式格式错误,输出结果为“0”。

public int arithmetic(String str) {

String[] strArr = str.split(" ");

if(strArr.length!=3 || !isNumeric(strArr[0]) || !isNumeric(strArr[2])) {

return 0;

}

String operator = strArr[1]; //运算符

int leftInt = Integer.valueOf(strArr[0]); //左操作数

int rightInt = Integer.valueOf(strArr[2]); //右操作数

int i = 0;

if("+".equals(operator)) {

i = leftInt + rightInt;

} else if("-".equals(operator)) {

i = leftInt - rightInt;

} else if("*".equals(operator)) {

i = leftInt * rightInt;

} else if("/".equals(operator)) {

i = leftInt / rightInt;

}

return i;

}

//判断字符串是否可转化为数字

public static boolean isNumeric(String str){

for (int i=0; i

if (!Character.isDigit(str.charAt(i))){

return false;

}

}

return true;

}

四、题目描述:

求一个字符串中有没有相同的部分,例如abcsabcvx这个字符串中相同的部分是abc,相同的部分至少应该为2位数,如果有相同部分返回true,如果没有返回false。

public boolean hasSameSubString(String str) {

int i = 0;

int length = str.length();

while(i

for(int j=2; j

String s1 = str.substring(i, i+j); //被包含字符串

String s2 = str.substring(i+j, length); //包含字符串

if(s1.length()<=s2.length() && s2.indexOf(s1)!=-1){ //判断条件

return true;

}

}

i++;

}

return false;

}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值