论坛首页 Java企业应用论坛

面试题:编写一个截取字符串的函数

浏览 20302 次
精华帖 (0) :: 良好帖 (4) :: 新手帖 (4) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-05-11  
adri1 写道
作为笔试题  意义不大

赞同阿 笔试题意义不大
0 请登录后投票
   发表时间:2011-05-11  
efei 写道
貌似是参考《JAVA面试题解惑系列》,我再复习一遍吧

江湖上还有这种书?
0 请登录后投票
   发表时间:2011-05-11  
老掉牙的考题。。。。
0 请登录后投票
   发表时间:2011-05-11  
这位仁兄分析的很对,这道题根本和编码没有任何关系
LZ估计是看了所谓的江湖的书,受了影响,以致于迷失方向
xzk3761 写道
分析的很好,受教了,但作为面试题,我想可能不是这么复杂,

对方考你的可能仅仅是让写段程序.
1\将拿到的String to char[]
2\for循环取得每个char判断字节长度
3\根据所给的限制字节数,只返回限制字节数范围内的字符串

0 请登录后投票
   发表时间: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));
    }

}
0 请登录后投票
   发表时间: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 平台中的增补字符
0 请登录后投票
   发表时间: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);
    }
0 请登录后投票
   发表时间: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));
    }

}

您这个运行结果就和运行环境的字符有很大关系,所以最好指定字符编码,以便准确输出
0 请登录后投票
   发表时间: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中
0 请登录后投票
   发表时间:2011-05-11  
如果语言是java,那真是没什么好说的,根本就和是不是中文没有关系

但如果是C语言,那还是比较有难度的
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics