怎么样确保字符串中汉字的显示在奇数位,如“i我要进屋”需要把“我”的前面加一个空格。怎么实现。在线等String

解决方案 »

  1.   

    转成数组,在判断下标,是就正常输出,不是就append一个空格
      

  2.   

    楼上的说法只能判断,但是append空格的时候会出现一个问题,append空格后后面的那些汉字本来处于奇数位的就不在处于奇数位了,但是还是会被append空格。
      

  3.   

    我写了一个楼主参考:public class ChineseCharAtEvev{
        public static void main(String[] args){
            //String original = "i我要进屋";
            String original = "i我要进屋fg我要喝水,我要看报";
            String result = change(original);
            System.out.println("originale string is \""+original+"\"");
            System.out.println("result string is \""+result+"\"");
        }
        //定义一个StringBuilder对象,用于产生一个新的字符串,使汉字的位置在偶数位上。
        //返回新的字符串。
        public static String change(String original){
            boolean even = false;                                    //记录ascii码出现的位置是否是偶数。
            int insert_numbers = 0;                                  //记录插入的空格个数,以计算后面的ascii字符位置。
            boolean isAscii = false;                                 //判断是否是ASCII字符。        StringBuilder sb = new StringBuilder("");
            for(int i=0; i<original.length(); i++){
                char c= original.charAt(i);
                if(((int)c)<128){                                    //小于128认为是ASCII字符。
                    sb.append(c);
                    isAscii = true;
                    even = ((i + insert_numbers)%2 ==0 ? true : false);
                }else{                                               //大于128认为使汉字。
                    if(isAscii && even){
                        sb.append(' ');
                        sb.append(c);
                        isAscii = false;
                        even = false;
                        insert_numbers++;
                    }else{
                        sb.append(c);
                        isAscii = false;
        even = false;                 
                    }
                }
            }//end for
            return sb.toString();
        }//end change
    }
      

  4.   

     
    public class testString
    {
    private final static String str = "adasd 阿斯大sa sda 我阿呆阿呆";
    // 中文范围
    private final static Pattern CHINESE_Pattern = Pattern.compile("[\u0391-\uFFE5]+$"); // 中文范围 public static void main(String[] args)
    { char[] ch = str.toCharArray();
    StringBuffer sb = new StringBuffer();
    for (int i = 0, k = 1; i < ch.length; i++, k++)
    {
    if (i % 2 != 0)
    {
    if (CHINESE_Pattern.matcher(String.valueOf(ch[i])).matches())
    {
    if (ch[i - 1] == ' ') // 是中文判断前面是否已存在空格
    {
    sb.append(ch[i]); // 如果存在空格直接添加
    } else
    {
    sb.append(" " + ch[i]);
    }
    } else
    // 不是中文直接加
    {
    sb.append(ch[i]);
    }
    } else
    {
    sb.append(ch[i]);
    } }
    System.out.println(sb.toString());
    }
    }