读书人

Java关于截取字符串的兑现

发布时间: 2012-10-23 12:12:22 作者: rapoo

Java关于截取字符串的实现

? 遇到这样一个问题,假设我们输入一串字符,不保证这一串字符里面是否有汉字,然后用户希望能过通过自己输入想要截断的字节数,将这个字符串截断输出,比如有这么一个字符串:“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);}
?大致上这样就可以实现了。

读书人网 >编程

热点推荐