Java不是同一用unicode编码吗,字节内存占用不是固定吗?遇到一个Java面试题,有疑问,不是如何。如下:编程:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,应该输出为“我ABC”而不是“我ABC+汉的半个”。

解决方案 »

  1.   

    比如gbk。import java.io.UnsupportedEncodingException;
    public class CutString {

    public static String substring(String orignal, int count)throws UnsupportedEncodingException {
    //原始字符不为null,也不是空字符串
    if(orignal != null && !"".equals(orignal)) {
    // 将原始字符串转换为GBK编码格式
    orignal = new String(orignal.getBytes(),"GBK");
    // 要截取的字节数大于0,且小于原始字符串的字节数
    if(count>0 && count<orignal.getBytes("GBK").length){
    StringBuffer buff = new StringBuffer();
    char c;
    int i=0;
    while(count > 0){
    c = orignal.charAt(i);
    count -= String.valueOf(c).getBytes("GBK").length;
    if(count >= 0){
    buff.append(c);
    }
    i++;
    }
    return buff.toString();
    }
    }
    return orignal;
    }
    public static void main(String[] args) {
    String s = "我ABC汉DEF";
    try {
    System.out.println(CutString.substring(s,5));
    } catch (UnsupportedEncodingException e) {
    e.printStackTrace();
    }
    }
    }
      

  2.   

    这样行吗public class Test20 { /**
     * @param args
     */
    public String depart(String str,int i){
    String str2="";
    for(int j=0;j<i;j++){
    System.out.println(str.charAt(j));
    str2+=str.charAt(j);
    }
    return str2;
    }
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    System.out.println(new Test20().depart("我是abcdef我", 5));


    }}
      

  3.   

    可能题目在这个地少写了“输入‘我ABC汉DEF’ 6”,少个造成我的不理解,我原以为‘我ABC汉DEF’取4个字节纳。谢谢。另外,题目隐含了用GBK处理。
      

  4.   

    这次应该对了public class Test20 { /**
     * @param args
     */
    public String depart(String str,int i){
    String str2="";
    for(int j=0;j<i;){
    System.out.println(str.charAt(j));
    str2+=str.charAt(j);
    if(str.charAt(j)>=0x4e00&&str.charAt(j)<0x9fa5){
    j++;
    i--;
    }
    else{
    j++;
    }
    if(i<j){
    str2=str2.substring(0, j-1);
    }
    }
    return str2;
    }
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    System.out.println(new Test20().depart("我ab是cdef我", 5));


    }}
      

  5.   


    public String cutOutStr(String str,int byteNum){
    if(str==null||str.getBytes().length<=byteNum){
    return str;
    }
    int len = 0;
    StringBuilder sb = new StringBuilder();
    for (Character ch : str.toCharArray()) {
    len = len + ch.toString().getBytes().length;
    if(len>byteNum){
    break;
    }
    sb.append(ch);
    }
    return sb.toString();

    }应该满足要求。