最近要准备换份工作,所以看了一些面试相关的内容,把相关的部分代码题大致整理一下,方便自己以后查看,也可以给广大朋友们提供参考,不定时更新。(为了方便调用,所有的方法都定义为静态的了。)
1、编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按照字节截取的字符串。
但是要保证汉字不能被截取半个,如“这A是B一个测试CDE”-3,应该截为“这A”,输入“这A是B一个测试CDE”-7,应该输出为“这A是B”,而不是“这A是B+一的半个”。
注意:在写代码的时候一定要注意自己的编码环境,GBK的编码格式下输出结果和上述题目一致,UTF-8的话,输出结果分别为“这”“这A是”,这是因为在UTF-8编码下,一个汉字占3个字节。其他编码格式对应的中文字节数请自行查询。
一个参考:
public static void main(String[] args) throws UnsupportedEncodingException {
String str = "中国";
System.out.println(str.getBytes("UTF-8").length);
System.out.println(str.getBytes("GBK").length);
System.out.println(str.getBytes("ISO-8859-1").length);
}
---------------------------
输出结果是:6 4 2
主代码:
public static void main(String[] args) {
String string = "这A是B一个测试CDE";
System.out.println(splitSpring(string, 3));
System.out.println(splitSpring(string, 7));
}
public static String splitSpring(String str, int i){
if(str != null && str.length() > 0){
byte[] bytes = str.getBytes();
if(i > bytes.length){
return "输入的截取长度超出字符串长度";
} else {
if(bytes[i] < 0){
//这种情况为汉字的截半,按照要求舍弃
return new String(bytes, 0, i-1);
} else
return new String(bytes, 0, i);
}
} else {
return "传入的字符串为空";
}
}
2、一个大于0的整数,按照n 2n 4n 8n 16n…的顺序递增,当值大于5000时结束,之后再倒着输出。
如 1237 2474 4948 9896 9896 4948 2474 1237
public static void main(String[] args) {
doubleNum(1237);
}
public static void doubleNum(int n){
System.out.print(n+" ");
if(n < 5000)
doubleNum(2*n);
System.out.print(n+" ");
}
3、打印字符的个数。
给定一个字符串(英文、中文、数字),方法一:输出各种字符出现的次数;方法二:输出不同种类字符的个数。如:“中国aafdsg是多fds民族45621国家”,输出结果见下文代码块。
public static void main(String[] args) {
methodOne("中国aafdsg是多fds民族45621国家");
methodTow("中国aafdsg是多fds民族45621国家");
}
public static void methodOne(String str) {
Map<Character, Integer> map = new HashMap<>();
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
Integer num = map.get(c);
if (num == null) {
num = 1;
} else
num++;
map.put(c, num);
}
//jdk 1.8
map.forEach((key, value) -> {
System.out.println(key + ":" + value);
});
// jdk 1.8 以下
for (Character key : map.keySet()) {
System.out.println(key + ":" + map.get(key));
}
}
public static void methodTow(String str) {
int englishNum = 0;
int chineseNum = 0;
int digitNum = 0;
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (c >= '0' && c <= '9')
digitNum++;
else if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))
englishNum++;
else
chineseNum++;
}
System.out.println("中文字符个数:" + chineseNum + ";英文字符个数:" + englishNum + ";数字个数:" + digitNum++);
}
-------------------------------------------------------------------------------
方法一的输出:
a:2
d:2
f:2
g:1
中:1
是:1
族:1
民:1
1:1
2:1
s:2
4:1
5:1
6:1
家:1
多:1
国:2
方法二的输出:
中文字符个数:8;英文字符个数:9;数字个数:5