锁定老帖子 主题:面试题:编写一个截取字符串的函数
精华帖 (0) :: 良好帖 (4) :: 新手帖 (4) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-05-11
adri1 写道 作为笔试题 意义不大
赞同阿 笔试题意义不大 |
|
返回顶楼 | |
发表时间:2011-05-11
efei 写道 貌似是参考《JAVA面试题解惑系列》,我再复习一遍吧
江湖上还有这种书? |
|
返回顶楼 | |
发表时间:2011-05-11
老掉牙的考题。。。。
|
|
返回顶楼 | |
发表时间:2011-05-11
这位仁兄分析的很对,这道题根本和编码没有任何关系
LZ估计是看了所谓的江湖的书,受了影响,以致于迷失方向 xzk3761 写道 分析的很好,受教了,但作为面试题,我想可能不是这么复杂,
对方考你的可能仅仅是让写段程序. 1\将拿到的String to char[] 2\for循环取得每个char判断字节长度 3\根据所给的限制字节数,只返回限制字节数范围内的字符串 |
|
返回顶楼 | |
发表时间:2011-05-11
//根本和编码没有关系
//考虑的是字符串而不是字符 public class Test { public static String subString(String str, int bytes) { StringBuilder sb = new StringBuilder(); int sum = 0; for (int i = 0; i < str.length(); i++) { String ch = str.substring(i, i + 1); if ((sum += ch.getBytes().length) > bytes) break; sb.append(ch); } return sb.toString(); } public static void main(String[] args) { String str = "我ABC"; System.out.println(subString(str,4)); str = "我ABC汉DEF"; System.out.println(subString(str,6)); } } |
|
返回顶楼 | |
发表时间:2011-05-11
最后修改:2011-05-11
如果不是限定了汉语,这个问题没有那么简单,编码从来不是简单的问题.
比如说,test.toCharArray() 返回的其实不一定是实际的字符数,因为Character类还有增补字符这个概念. public static void main(String[] args) { System.out.println(Character.charCount(0x10000)); System.out.println(new String(Character.toChars(0x10000))); String test = new StringBuilder().append('a').append('中').append(new String(Character.toChars(0x10000))).toString(); System.out.println(test); System.out.println(test.length()); } 上面的代码运行结果是: a中? 4 虽然说那个?我们不知道是什么东西,但是从语义上来讲,它确实是单个字符,并且在java内部被两个char联合表示. (顺便报告JE的一个bug,最初那个特殊字符我不是用?来代替的,而是使用符号本身,但是在提交后,发现回复从这个增补字符的地方被截断了) 有兴趣的朋友可以看看下面这篇文章: Java 平台中的增补字符 |
|
返回顶楼 | |
发表时间:2011-05-11
最后修改:2011-05-11
再次郑重声明,本题和字符编码没有关系
大家需要清楚一个概念,字符串是由单个字符串(String)连接而成的,不是由单个字符(char)连接而成的 如 "中国"="中"+"国"; 而不是"中国"='中'+'国'; public static String subString2(String str, int bytes) { int i = 1; for (; i <= str.length() && str.substring(0, i).getBytes().length <= bytes; i++) ; return str.substring(0, i-1); } |
|
返回顶楼 | |
发表时间:2011-05-11
nianien 写道 //根本和编码没有关系
//考虑的是字符串而不是字符 public class Test { public static String subString(String str, int bytes) { StringBuilder sb = new StringBuilder(); int sum = 0; for (int i = 0; i < str.length(); i++) { String ch = str.substring(i, i + 1); if ((sum += ch.getBytes().length) > bytes) break; sb.append(ch); } return sb.toString(); } public static void main(String[] args) { String str = "我ABC"; System.out.println(subString(str,4)); str = "我ABC汉DEF"; System.out.println(subString(str,6)); } } 您这个运行结果就和运行环境的字符有很大关系,所以最好指定字符编码,以便准确输出 |
|
返回顶楼 | |
发表时间:2011-05-11
public class TestCutString {
/** * @param args */ public static void main(String[] args) { String test = "abc中文def"; String rs = test.substring(1, 4); System.out.println(rs); } } bc中 |
|
返回顶楼 | |
发表时间:2011-05-11
如果语言是java,那真是没什么好说的,根本就和是不是中文没有关系
但如果是C语言,那还是比较有难度的 |
|
返回顶楼 | |