问题:
有一个由大小写组成的字符串,现在需要对它进行修改,将其中的所有小写字母排在大写字母的前面(大写或小写字母之间不要求保持原来次序)。
解决办法:
设置2个指针i和j,i最初指向字符串的第一个位置,j指向字符串的最后一个位置;
i向后遍历直到遇到第一个大写字符,j向前遍历直到遇到第一个小写字母,交换i和j位置上的字符;
直到i=j+1,结束;注意交换前需要判断i是否小于j,否则最后的两个字符不正确。
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(); }