首页 > 代码库 > 小写字母置前

小写字母置前

问题:

有一个由大小写组成的字符串,现在需要对它进行修改,将其中的所有小写字母排在大写字母的前面(大写或小写字母之间不要求保持原来次序)。

解决办法:

设置2个指针i和j,i最初指向字符串的第一个位置,j指向字符串的最后一个位置;

i向后遍历直到遇到第一个大写字符,j向前遍历直到遇到第一个小写字母,交换i和j位置上的字符;

直到i=j+1,结束;注意交换前需要判断i是否小于j,否则最后的两个字符不正确。

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public String lowerBeforeUpper(String s){
        int len =s.length();
        int i=0;
        int j=len-1;
        while(i<j){
            while(i<len&&s.charAt(i)>=‘a‘&&s.charAt(i)<=‘z‘){   //xiaoxie
                i++;
            }
            while(j>=0&&s.charAt(j)>=‘A‘&&s.charAt(j)<=‘Z‘){
                j--;
            }
            if(i<j){
                s = switchIJ(s,i,j);   
            }
        }
        return s;
    }
     
    private String switchIJ(String s, int i, int j) {
        // TODO Auto-generated method stub
        StringBuffer a = new StringBuffer(s);
        char temp= a.charAt(i);
        a.setCharAt(i, a.charAt(j));
        a.setCharAt(j, temp);
        return a.toString();
    }