遇到这样一个问题,假设我们输入一串字符,不保证这一串字符里面是否有汉字,然后用户希望能过通过自己输入想要截断的字节数,将这个字符串截断输出,比如有这么一个字符串:“def中国abc你好”,想要以3个字节输出,应该是怎么样的呢?
Java里面是如何实现呢?
其实这类问题主要是在中文与英文所占的字节数不一样的原因,中文是2个字节,英文和数字都是1个字节,理解了这个就很好实现了。
主要步骤是将字符串先转化成字符数组,代码如下:
/**
* 字符串转化成数组
* @param str
* @return
*/
public static String[] splitToArray(String str) {
String[] newStr = new String[str.length()];
for (int i = 0; i < newStr.length; i++) {
newStr[i] = str.substring(i,i+1);
}
return newStr;
}
然后就遍历每个字符,我们会声明一个计数变量,如果已达到用户要求的字节数,就会清零,然后输入之前截取的字符串。
public static void truncateStr(String str, int n) {
int count = 0;
String regex = "[\\u4e00-\\u9fa5]";
System.out.println(str.length());
String[] temp = splitToArray(str);
for (int i = 0; i < temp.length; i++) {
if (temp[i].matches(regex)) {
count +=2;
} else {
count +=1;
}
if(count<n){
System.out.print(temp[i]);
}else if(count == n ){
System.out.print(temp[i]);
count = 0;
System.out.println();
}else{
count = 0;
System.out.println();
}
}
}
最后就是在main方法中调用即可。
private static String inputStr = "";
private static int cbyte = 0;
public static void main(String[] args) {
System.out.println("请输入字符串:");
Scanner scanner = new Scanner(System.in);
inputStr = scanner.next();
System.out.println("请输入需要截断的字节数:");
Scanner scanner2 = new Scanner(System.in);
cbyte = scanner2.nextInt();
truncateStr(inputStr, cbyte);
}
大致上这样就可以实现了。