java基础面试题:怎样截取字符串

 

编写一个截取字符串的函数,输入为字符串和字节数,输出为按字节数截取的字符串。按时要保证汉字不被截半个,如“你hjk“ 4,应该截取为”你hj“,输入”你fdh看点fds“ 6,应该输出”你fdh“,而不应该是”你fdh“加上半个”看“字。

import java.util.Scanner; public class InterceptionStr { static String ss; static int n; public static void main(String[] args) { System.out.println("Please enter a String:"); Scanner scStr = new Scanner(System.in); ss = scStr.next(); System.out.println("Please enter the number of bytes:"); Scanner scNum = new Scanner(System.in); n = scNum.nextInt(); Interception(setValue()); } public static String[] setValue() { String [] str = new String[ss.length()]; for(int i=0; i<str.length; i++) { str[i] = ss.substring(i,i+1); } return str; } public static void Interception(String[] str) { int count = 0; String reg = "[/u4e00-/uu9fa5]"; //汉字的正则表达式 System.out.println("Interception the string by" + n + "bytes:"); for(int i = 0; i<str.length; i++) { if(str[i].matches(reg)) { //将字符数组中的每一个元素与正则表达式进行匹配 count = count + 2; //如果为汉字,计数器count加2 }else { count = count + 1; //不是汉字,计数器count加1 } if(count < n) { //如果当前计数器count小于n,输出当前字符 System.out.print(str[i]); }else if(count == n) { //如果当前计数器count等于n,输出当前字符 System.out.print(str[i]); count = 0; System.out.println(); }else { //如果当前计数器count大于n,计数器count清零,接着执行外部循环 count = 0; System.out.println(); } } } } 

本题容易出问题的是中文字符和英文字符的问题,只要知道汉字占两个字节,英文占一个字节,另外使用中文的正则表达式就可以完成本题了。

-----摘自《java程序员面试指南》 张昆等编著

 

你可能感兴趣的:(java,String,正则表达式,面试,Class,import)