java 代码
- package org.danlley.util;
- public class StringTools{
- /**
- * 说明:如果需要截取的长度大于字符串实际可以被截取的长度,则按实际可截取长度进行截取,
- * 此时不用考虑汉字问题。如果要截取的长度在实际可截取长度的许可范围内,则需要考虑
- * 汉字的问题。具体做法是,先把字符串转换成字符数组,然后对每个字符进行判断,如果
- * 字符所占用的长度是“2”的整数倍,则认为这个字属于非英文字符。
- * @param str 待处理字符串
- * @param index 处理的首位置
- * @param length 长度
- * @return
- * @throws java.lang.Exception
- */
- public String subString(String str,int index,int length) throws Exception{
- try{
- String returnStr=null;
- byte[] bytes=str.getBytes();
- int len=bytes.length;
- boolean lenFlow=((len-index)>length)?(true):(false);
- if(lenFlow){
- String tmpStr;
- StringBuffer tmpBfStr=new StringBuffer();
- int curlen=0;
- int j=0;
- while(j<length){
- char mychar=str.charAt(j);
- tmpStr=String.valueOf(mychar);
- if(tmpStr.getBytes().length%2==0){
- j+=2;
- if(j>length){
- break;
- }
- }else{
- j++;
- }
- tmpBfStr.append(tmpStr);
- }
- returnStr=tmpBfStr.toString();
- }else{
- returnStr=str.substring(index,str.length());
- }
- return returnStr;
- } catch(Exception e){
- e.printStackTrace();
- e.getMessage();
- throw new Exception(e);
- }
- }
- public static void main(String[] args) throws Exception{
- try{
- String message="test中dd文dsaf中男大3443n中国43中国人";
- StringTools stringTools=new StringTools();
- String str=stringTools.subString(message,0,5);
- System.out.println(str);
- } catch(Exception ex){
- ex.printStackTrace();
- throw new Exception(ex);
- }
- }
- }