字符相关算法(二)

来源:互联网 发布:淘宝客服聊天话术技巧 编辑:程序博客网 时间:2024/05/29 18:20

将字符串中所有的*移动到左边

1.使用冒泡排序的方式,冒泡是稳定的,可以保证字符的顺序

public void removeLeftAndRight(char[] a)    {        for(int i=0;i<a.length;i++)        {            for (int j=a.length-1;j>i;j--)            {                if(a[j]=='*'){                    char temp=a[j-1];                    a[j-1]=a[j];                    a[j]=temp;                }            }        }    }

2.从后往前扫描遇到字符就放到数组后面相应的位置,前面剩余的位置,补上*即可

 public void removeLeftAndRightn(char[] a)    {        int len=a.length;        for(int i=len-1;i>=0;i--)        {            if(a[i]!='*')            {                a[--len]=a[i];            }        }        for(int i=len-1;i>=0;i--)        {            a[i]='*';        }    }

统计字符出现的次数

利用数组,数组下标代表字母,如0代表A,依次类推。然后存储出现的次数

 public void countChar(char[] a)    {        int[] result=new int[52];        for (int i=0;i<a.length;i++)        {            result[a[i]-'A']++;        }        for(int i=0;i<result.length;i++)        {            System.out.println((char) ('A'+i)+":"+result[i]);        }    }

压缩字符串中的空格,如果有两个空格则压缩成一个空格

利用两个指针,如果第一个指针遇到了空格,则判断第二指针是否是空格,直到第二个指针不为空格,则将前一个指针的值放到新数组里

 public String compressBlank(char[] a)    {        if(a==null)        {            return a.toString();        }        StringBuilder stringBuilder=new StringBuilder();        for (int i=0;i<a.length;i++)        {            //a[i]是空格才进一步判断,否则直接放到新数组里            if(a[i]==' ')            {                //碰到连续的空格,则继续                if((i+1)<a.length&&a[i+1]==' ')                {                    continue;                }else {                    stringBuilder.append(a[i]);                }            }else {                stringBuilder.append(a[i]);            }        }        return stringBuilder.toString();    }
0 0