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