package interview.homework;public class HW212 {
String str;
int i;

public static void main(String[] args) {
HW212 hw = new HW212("我ABC汉DEF",6);
hw.metho();
}

public HW212(String str,int i) {
this.str = str;
this.i = i;
}

public void metho() {
int temp = ((str.length()%i) == 0)?(str.length()/i):(str.length()/i+1);

for(int i = 1; i <= temp; i++) {
if(i == temp) System.out.println(str.substring((i-1)*(this.i), str.length())); // 结果是:"EF"                 else System.out.println(str.substring((i-1)*(this.i), i*(this.i))); // 结果是:"我ABC汉D" }
}
}这道面试题目相信大家都已经看过,但是,"我ABC汉DEF",6 ,网络上的解答都是这样,与题目的所要求得到的结果不同...,不知道为什么??
一个汉字是两个字节,而一个英文字母只需一个字节就可以存储,因此按照题目的要求,不能把"汉"分割成两半,因此需要输出"我ABC",但是....? 

解决方案 »

  1.   

    楼主想太多了,unicode汉字也是一个字符。
    length是字符串的字符个数。
    str.length=8 i=6
    所以temp = 8/6+1=2
    打印出substring(6,8)所以就是EF了。
    还有你的问题貌似有些问题,别用省略号,不知道你要说什么。
      

  2.   

    这个程序你得算法不能这样做
    你可以用str的getChars(srcBegin, srcEnd, dst, dstBegin) 取数据到 char[] 中
    然后从数组按照下标中来取你想要的
    或者用str.charAt() 
      

  3.   

    String 其实就是 字符数组
    一个字符可以存储一个汉字,所以没什么问题.
      

  4.   

    String str; 
    int i; 
    str = "我ABC汉DEF";
    i = 6;
    str.length= 8;
    temp = 8/6 + 1 = 2;
    汉字和英文都是16位的。unicode.