Java字符串提取中英文实现 10C

我想要实现把一个字符串里面的中文和英文分割提取出来
比如这么一句话:
"做错事情,需要道歉的时候,说:I'am sorry. 现在请你说一遍"
我想要的结果是 返回一个数组
String[]{"做错事情,需要道歉的时候,说:","I'am sorry",". 现在请你说一遍"}

5个回答

中英文字符的判断可以通过字符所占的字节数判断,一个英文一般1byte,中文为2byte

你说的应该是字符串的插入吧 用StringBuffe 方法 插入后,用一个变量来接。 然后将这个变量放到数组里面

用一个数组放所有的字符串,可以通过判断Unicode码的取值范围判断是英文字母或汉字,然后英文在前中文在后排序输出。

欢迎交流--

 import java.util.regex.Matcher;
public class test  {
    public static void main (String[] args)
    {

        String s1 ="做错事情,需要道歉的时候,说:I'am sorry. 现在请你说一遍";
        char [] array = new char[1000];
        int t = 0;

        StringBuffer s = new StringBuffer(s1);  
        for (int k=0;k<s.length();k++ )
        {
            char c = s.charAt(k);
            if(c=='会')
            System.out.println(k);
            if(isChinese(c))
            {
                if(t == 0||isChinese(s.charAt(k-1))!=true)
                {
                    array[t]='\"';
                    t++;
                }

                array[t]=c;
                t++;

                if(k!=s.length()-1){
                if(!isChinese(s.charAt(k+1)))
                {
                    array[t]='\"';
                    t++;
                    array[t]=',';
                    t++;
                }
                }
                if(k==s.length()-1){
                    array[t]='\"';
                    t++;
                    break;
                }
            }
            else
            {
                if(t == 0||isChinese(s.charAt(k-1))==true)
                {
                    array[t]='\"';
                    t++;
                }

                array[t]=c;
                t++;

                if(k!=s.length()-1){
                if(isChinese(s.charAt(k+1)))
                {
                    array[t]='\"';
                    t++;
                    array[t]=',';
                    t++;
                }
                }
                if(k==s.length()-1){
                    array[t]='\"';
                    t++;
                    break;
                }
            }
        } 
            System.out.print(array);
    }
    //判断是不是英文
     public static boolean isChinese(char c) 
    {
        Character.UnicodeBlock ub = Character.UnicodeBlock.of(c);
        if (ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS
            || ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS
            || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A
            || ub == Character.UnicodeBlock.GENERAL_PUNCTUATION
            || ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION
            || ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS) 
            {
           return true;
            }
          return false;
        }
}

补充下

 char [] array = new char[50];//大小要提前设定会浪费
 /*if(c=='会')
            System.out.println(k);*/    //去掉
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐