面试题,字符串 的问题 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如"我ABC"4,应该截为"我AB",输入"我ABC汉DEF",6,应该输出为"我ABC"而不是"我ABC+汉的半个"。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 写的不好请大家批评:)public static String subStringByByte(String str , int byteLength){ String tempStr = ""; for(int i = 0;i < str.length();i++){ tempStr = str.substring(0,i); if(tempStr.getBytes().length > byteLength){ tempStr = str.substring(0,i-1); break; }else if(tempStr.getBytes().length == byteLength){ tempStr = str.substring(0,i); break; } } return tempStr; } public static void main(String[] args){ String str = "不ABC安DEF"; System.out.println("subStringByByte(str ,4 ) = " + subStringByByte(str,4)); System.out.println("subStringByByte(str ,6 ) = " + subStringByByte(str,6)); }运行结果:subStringByByte(str ,4 ) = 不ABsubStringByByte(str ,6 ) = 不ABC 看到这个题目,觉得蛮有意思,试了试.不知道有没有问题 public String getHalfStr(String tempstr ){ StringBuffer sb = new StringBuffer(); int tl = tempstr.length(); char[] chars = tempstr.toCharArray(); int cl = 0 ; for(int i = 0 ;i < chars.length;i++){ char currentChar = chars[i]; cl += String.valueOf(currentChar).getBytes().length; if (cl > tl)break; sb.append(currentChar); } return sb.toString(); } 如果你按照 gb2312 或者 gbk 来编码String,你永远不会得到一半的汉字。如果你按照 iso8859-1 编码String,你就可能得到一般的汉字了 这个题目有问题吧,JAVA中是unicode编码,不论汉字还是英文字符都占两个字节. 应该是把字符串转为字节数组之后再进行截取,但不能有半个汉字。否则按string的length来截取的话,真的和楼上说的一样不会出现半个汉字 JAVA static 在web 中的作用 java计算器修改 decimal类型存储时间 包导入的问题 这个该死的SWT(SWT中布局的问题) 活动界面 java中可以根据线程名而不是id获得想要的线程吗? java高手救命!!!!!!!! jb5怎样配置可以发布到WEBLOGIC上? 求大佬帮忙解决问题 关于jdbc访问数据库的 ,思路是什么啊? Collection 集合! 菜鸟问题
写的不好请大家批评:)public static String subStringByByte(String str , int byteLength){
String tempStr = "";
for(int i = 0;i < str.length();i++){
tempStr = str.substring(0,i);
if(tempStr.getBytes().length > byteLength){
tempStr = str.substring(0,i-1);
break;
}else if(tempStr.getBytes().length == byteLength){
tempStr = str.substring(0,i);
break;
}
}
return tempStr;
}
public static void main(String[] args){
String str = "不ABC安DEF";
System.out.println("subStringByByte(str ,4 ) = " + subStringByByte(str,4));
System.out.println("subStringByByte(str ,6 ) = " + subStringByByte(str,6));
}
运行结果:
subStringByByte(str ,4 ) = 不AB
subStringByByte(str ,6 ) = 不ABC
public String getHalfStr(String tempstr ){
StringBuffer sb = new StringBuffer();
int tl = tempstr.length();
char[] chars = tempstr.toCharArray();
int cl = 0 ;
for(int i = 0 ;i < chars.length;i++){
char currentChar = chars[i];
cl += String.valueOf(currentChar).getBytes().length;
if (cl > tl)break;
sb.append(currentChar);
}
return sb.toString();
}