15、编程:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。 

解决方案 »

  1.   


    public class Intercept { public static  String intercept(String str,int len) throws Exception {

    byte[] bytes = str.getBytes();
    System.out.println(bytes.length);
    if(bytes.length<len) {
    throw new Exception("你的字符串没那么长");
    }
    char[] chars = str.toCharArray();
    StringBuffer sb = new StringBuffer();
    for(int i = 0;i<len;) {
    if(String.valueOf(chars[i]).getBytes().length==1) {
    sb.append(chars[i]);
    i++;
    continue;
    }
    if(String.valueOf(chars[i]).getBytes().length==2) {
    if((i+2)<len) {
    sb.append(chars[i]);
    i++;
    len--;
    }
    else {
    break;
    }
    }
    }


    return sb.toString();
    }

    public static void main(String[] args) {
    try {
    String str = Intercept.intercept("我ABC汉DEF", 6);
    System.out.println(str);
    } catch (Exception e) {
    e.printStackTrace();
    }
    }}
      

  2.   

    有此问题我想到了另外一套题可用相似的方法来解决:
    问题描述:
        将一个字符串中的中文子串提取出来,字符串的格式类似如下:
    "abc 我love你 123 我也爱你 al5 爱的就是你" 中间用空格隔开
    我的思路如下:package org.mypack2;import java.util.ArrayList;
    import java.util.List;
    public class Intercept { public static Object[] pickup(String str) {
    String[] strs = str.split(" ");
    List<String> pickupList = new ArrayList<String>();
    for(String st : strs) {
    if((st.length()*2)==(st.getBytes().length)) {
    pickupList.add(st);
    }
    }
    return pickupList.toArray();

    }

    public static void main(String[] args) {

    String str= "abc 我love你 123 我也爱你 al5 爱的就是你";
    Object[] strs = Intercept.pickup(str);
    for(Object st : strs) {
    System.out.println(st.toString());
    }
    }}各位有什么其它意见???
      

  3.   

    对Unicode和字符集缺乏清晰的认识...
      

  4.   


    class  SplitString{ String SplitStr; int SplitByte; public SplitString(String str,int bytes) {  SplitStr=str;  SplitByte=bytes;  System.out.println("The String is:'"+SplitStr+"';SplitBytes="+SplitByte); } public void SplitIt() {  int loopCount;  loopCount=(SplitStr.length()%SplitByte==0)?(SplitStr.length()/SplitByte):(SplitStr.length()/Split Byte+1);  System.out.println("Will Split into "+loopCount);  for (int i=1;i<=loopCount ;i++ )  {   if (i==loopCount){    System.out.println(SplitStr.substring((i-1)*SplitByte,SplitStr.length()));   } else {System.out.println(SplitStr.substring((i-1)*SplitByte,(i*SplitByte)));   }  } } public static void main(String[] args)  {  SplitString ss = new SplitString("test中dd文dsaf中男大3443n中国43中国人 0ewldfls=103",4);  ss.SplitIt(); }} 
      

  5.   

    汉字与字母都是Unicode
      可以按字符来处理 
       就可以了啦!
      搞得那么多干什么咯?
      

  6.   


        /**
         * 按字节分割字串, 例如以每10个字节为一段
         * @param resourceStr String 原字符串
         * @param byteCntPerUnit int 每单位字节数
         * @return ArrayList 返回切分后的list
         */
        public static ArrayList splitStringByByte(String resourceStr, int byteCntPerUnit) {
            ArrayList list = new ArrayList();
            String tmpStr = null;
            
            int strLength = resourceStr.length();
          
            int currentIndex = 0;
            int lastEndIndex = 0;
            while (lastEndIndex < strLength - 1) {
                for (currentIndex = lastEndIndex; currentIndex < strLength; currentIndex++) {
                    tmpStr = resourceStr.substring(lastEndIndex, currentIndex + 1);
                    if (tmpStr.getBytes().length > byteCntPerUnit) {
                        break;
                    }
                }
                tmpStr = resourceStr.substring(lastEndIndex, currentIndex);
                list.add(tmpStr);
                lastEndIndex = currentIndex;
            }        
            return list;
        }以上相似, 供参考!
      

  7.   

    JAVA不是UNICODE吗?
    汉字占一个字符。
      

  8.   

    issgates一直很安静 写的真棒.cd_tiger的,我不太能理解...解释下,谢谢.
      

  9.   

     
    为什么这里 currentIndex + 1要加1
    tmpStr = resourceStr.substring(lastEndIndex, currentIndex + 1);tmpStr = resourceStr.substring(lastEndIndex, currentIndex);
    这里没有