当前位置: 代码迷 >> J2SE >> 一道面试题,关于英文、汉字字符编码及字节方面的疑问?解决思路
  详细解决方案

一道面试题,关于英文、汉字字符编码及字节方面的疑问?解决思路

热度:115   发布时间:2016-04-24 01:17:52.0
一道面试题,关于英文、汉字字符编码及字节方面的疑问?
Java不是同一用unicode编码吗,字节内存占用不是固定吗?遇到一个Java面试题,有疑问,不是如何。如下:

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



------解决方案--------------------
10年前的题?
------解决方案--------------------
比如gbk。
Java code
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();        }    }}
------解决方案--------------------
这样行吗
Java code
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));                    }}
------解决方案--------------------
这次应该对了
Java code
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));                    }}
------解决方案--------------------
Java code
    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();            }
  相关解决方案