把“abc我AD中国人”这个字符串分隔开,汉字与英文分开,结果分别是 “abc”,“我”,“AD”,“中国人

解决方案 »

  1.   


    var str = "abc我AD中国人";
    str = str.replace(/(\w+|[\u4e00-\u9fa5]+)/g,"$1,");
    alert(str)
      

  2.   

    public class Test {    public static void main(String[] args) {        
            String str = "abc我AD中国人";
            String[] strs = str.split("(?<=[a-zA-Z])(?=[\\p{InCJK Unified Ideographs}&&\\P{Cn}])|(?<=[\\p{InCJK Unified Ideographs}&&\\P{Cn}])(?=[a-zA-Z])");        for(int i = 0; i < strs.length; i++) {
                System.out.println(strs[i]);
            }
        }
    }
      

  3.   

    请问大虾,如果我这里面有数字貌似就不行了,比如 "abc我123AD中国人",数字当成字母,结果为abc,我,123AD,中国人  
     
    谢谢
      

  4.   

    哦,。。知道了。呵呵。是这样把:
    String[] strs = str.split("(?<=[a-zA-Z0-9])(?=[\\p{InCJK Unified Ideographs}&&\\P
    {Cn}])|(?<=[\\p{InCJK Unified Ideographs}&&\\P{Cn}])(?=[a-zA-Z0-9])")
    但是你这正则我看不太懂,结构是(字母)(汉字)|(汉字)(字母),这个懂但是里面写的?<=以及?=这些看不懂。郁闷呢
      

  5.   

    用这种方式不行吗?public class SplitDemo {
    String str;
    int bytes; private void splitMethod(String str, int bytes) {
    int loopCount = str.length() % bytes == 0 ? str.length() / bytes : str.length() / bytes + 1;
    for (int i = 1; i < loopCount; i++) {
    if (i == loopCount) {
    System.out.println((str.substring((i - 1) * bytes, str.length())));
    } else {
    System.out.println((str.substring((i - 1) * bytes, i * bytes)));
    }
    }
    } public static void main(String[] args) {
    String s = "ASDFDF的函34343数";
    SplitDemo sd = new SplitDemo();
    sd.splitMethod(s, 2);
    }
    }