题目描述:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 要求汉字不能出现截半的情况,同时忽略字符串中的数字后输出结果。
输入描述:一行字符串和待截取的字节数
输出描述:单独的一行截取后的字符串
输入:
华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位来寻找对应的中文字。