Java面试中可能遇到的笔试代码题

  最近要准备换份工作,所以看了一些面试相关的内容,把相关的部分代码题大致整理一下,方便自己以后查看,也可以给广大朋友们提供参考,不定时更新。(为了方便调用,所有的方法都定义为静态的了。)

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值