通过正则,先替换掉非汉字的字符
然后 按照两个两个的来截取,处理好最后一个单字符的情况     String str = "你吃饭了吗,我们去吃饭吧。";
    String regex = "[^\u4e00-\u9fa5]+";
    String str2 = str.replaceAll(regex, "");
    for (int i = 0; i < str2.length(); i=i+2) {
        if (i+2 < str2.length()) {
            System.out.println(str2.subSequence(i, i+2));
        }
        else {
            System.out.println(str2.subSequence(i, i+1));
        }
    }

解决方案 »

  1.   

    这是一样的啊,你把1楼的代码稍作修改for (int i = 0; i < str2.length()-1; i++) {
            if (i+2 < str2.length()) {
                System.out.println(str2.subString(i, i+2));
            }
            else {
                System.out.println(str2.subString(i));
            }subSequence的效果跟subString效果一样
      

  2.   

    String str = "你吃饭了吗,我们去吃饭吧。";
        String regex = "[^\u4e00-\u9fa5]+";
        String str2 = str.replaceAll(regex, "");
        // 3楼答过了,就是把i=i+2,换为i++。每次跳一个字符就可以了
        for (int i = 0; i < str2.length(); i=i+2) { 
            if (i+2 < str2.length()) {
                System.out.println(str2.subSequence(i, i+2));
            }
            else {
                System.out.println(str2.subSequence(i, i+1));
            }
        }
      

  3.   

    楼上正解!
    String str = "你吃饭了吗,我们去吃饭吧。";
            String regex = "[^\u4e00-\u9fa5]+";
            String str2 = str.replaceAll(regex, "");
            for (int i = 0; i < str2.length(); i=i+1) { 
                if (i+1 < str2.length()) {
                    System.out.println(str2.subSequence(i, i+2));
                }
                else {
                    System.out.println(str2.subSequence(i, i+1));
                }
            }