一道面试题,关于英文、汉字字符编码及字节方面的疑问? Java不是同一用unicode编码吗,字节内存占用不是固定吗?遇到一个Java面试题,有疑问,不是如何。如下:编程:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,应该输出为“我ABC”而不是“我ABC+汉的半个”。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 比如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(); } }} 这样行吗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)); }} 可能题目在这个地少写了“输入‘我ABC汉DEF’ 6”,少个造成我的不理解,我原以为‘我ABC汉DEF’取4个字节纳。谢谢。另外,题目隐含了用GBK处理。 这次应该对了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)); }} 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(); }应该满足要求。 关于Socket的问题 各位老大帮我看下这个菜鸟问题,关于读取文件的 哪里可以下到myeclipse的Matisse插件呀! properties文件的获取的问题 myeclipse下的tomcat配置问题 求教多线程下载中的任务分发算法 大问题请教 java類問題 菜鸟一问:如何使用自定义类的数组 请教一个Swing的图文混排的实现需求的技术解决方案. RandomAccessFile乱码问题,谢谢。 新手求助,关于数据域可见性的问题。
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();
}
}
}
* @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));
}}
* @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));
}}
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();
}应该满足要求。