华为2018实习生笔试编程题 一

题目描述:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 要求汉字不能出现截半的情况,同时忽略字符串中的数字后输出结果。

输入描述:一行字符串和待截取的字节数

输出描述:单独的一行截取后的字符串

输入:

华HUA
4
输出:

华HU

分析:

1、按照字节[byte]截取操作字符串,先将String转换成byte类型

2、汉字使用两个字节进行编码,汉字截半的话对应字节的ASC码为小于0的数值

3、去除字符串中的数字,使用replaceAll("\\d+","")方法实现

补:replaceAll("[a-zA-Z]","" )方法去除字符串中的字母(正则表达式)


代码实现:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
    	Scanner sc = new Scanner(System.in);  	
    	String str = sc.nextLine().replaceAll("\\d+","");
    	int n = sc.nextInt();
        splitString(str, n);
    }

    public static void splitString(String src, int len) {
        int byteNum = 0;

        if (null == src) {
            return;
        }
        byteNum = src.length();
        byte bt[] = src.getBytes(); // 将String转换成byte字节数组
        
        for(int i = 0;i<bt.length;i++){
        	System.out.println(bt[i]);     	
        }
        if (len > byteNum) {
            len = byteNum;
        }
        // 判断是否出现了截半,截半的话字节对应的ASC码的值小于0
        if (bt[len] < 0) {
            String subStrx = new String(bt, 0, --len);
            System.out.println(subStrx);
        } else {
            String subStrx = new String(bt, 0, len);
            System.out.println( subStrx);
        }
    }
}

说明:

        对于一串中英文混合的二进制编码中,系统区别是中文还是英文编码的大致方法是:先取8位,若首位为0,则解释为英文,若首位为1,则重新取2个字节16位来寻找对应的中文字。


猜你喜欢

转载自blog.csdn.net/ncut_nwpu/article/details/79996044