有一个String s="SDsBEaA"
要求产生这样的结果:s="AaBDESs",请高手帮忙!

解决方案 »

  1.   

    试着写了一个
    public class Test {
    public static void main(String args[]){
    String   s="SDsBEaA";
    char[] c= s.toCharArray();
    for(int j =0;j<c.length;j++){
    for(int i = 0;i<c.length-1;i++){
    char temp1=Character.toUpperCase(c[i]);
    char temp2=Character.toUpperCase(c[i+1]);

    if(temp1==temp2){
    temp1=c[i];
    temp2=c[i+1];
    }

    if(temp1>temp2){
    char temp = c[i];
    c[i]=c[i+1];
    c[i+1]=temp;
    }


    }
    }
    s = new String(c);
    System.out.println(s);


    }
    }
      

  2.   

    不对吧 
    按ASCII码来讲:
    A<B<C<D....<a<b<c<d....
    但结果是:
    AaBDESs   明显A和B中间有个a,不能纯按Ascii比较
      

  3.   

    给小写的字符减去31.5再用ascii比较,排序就ok
      

  4.   


    public class Test{
            public static void main(String args[]){
    String s="SDsBEaA";
    Test test=new Test();
    s=test.sort(s);
    System.out.println(s);
    }
    public String sort(String param){
    char c[]=param.toCharArray();
    char min;
    String s1;
    String s2;
    for(int i=0;i<c.length;i++){
    min=c[i];
    s1=min+"";
    for(int j=i+1;j<c.length;j++){
    s2=c[j]+"";
    if(s1.compareToIgnoreCase(s2)>0 || (s1.compareToIgnoreCase(s2)==0 && s1.compareTo(s2)>0)){
    min=c[j];
    c[j]=c[i];
    c[i]=min;
    s1=min+"";
    }
    }
    }

    return new String(c);
    }
    }
      

  5.   


    String   s="SDsBEaA" ;
    StringBuffer sb=new StringBuffer(s); 
    System.out.println("The reversed string is: "+sb.reverse()); //这就是你想要的结果
      

  6.   

    import java.util.*;
    import java.util.List;
    public class sortBy
    {

    public static void main(String str[])


    String s="zSDsBEaA";  
    List listLow = new ArrayList(); 
    List newList = new ArrayList();
    for(int index = 0;index<s.length();index++)
    {
     
        char ch = s.charAt(index);
        int as = (int)ch;
        String str44 = String.valueOf(ch);
          
        if(as>90)
        {
        
          listLow.add(str44);
        } 
        
        newList.add(str44.toUpperCase());
             

    Collections.sort(listLow); 
    Collections.sort(newList); 
     
    StringBuffer strB = new StringBuffer();
    for(int index =0;index<newList.size();index++)
    {
    strB.append(newList.get(index).toString());
    }  

         
    for(int index =0;index<listLow.size();index++)
    {
    String strLow = listLow.get(index).toString();
    String strUp = strLow.toUpperCase(); 
    if(strB.indexOf(strUp) != strB.lastIndexOf(strUp)){ 

          
    strB.replace(strB.lastIndexOf(strUp),strB.lastIndexOf(strUp)+1,strLow);
    }else{

    strB.replace(strB.indexOf(strUp),strB.lastIndexOf(strUp)+1,strLow);
    }


           
            String returnStr = strB.toString();  

       System.out.println("returnStr>>>>>>>>>>>>"+returnStr);  

    }
    }
    費了九牛二虎之力才弄出來,哎 ,真是一天不寫代碼手九生,
      

  7.   

    按照7楼的写法,写了一个public class Test {    public static void main(String[] args) {
            String str = "SDsBEaA"; 
            System.out.println(sort(str));
        }
        
        public static String sort(String str) {
            char[] chars = str.toCharArray();
            float[] fs = new float[chars.length];
            for (int i = 0; i < fs.length; i++) {
                if (chars[i] >= 'a' && chars[i] <= 'z') {
                    fs[i] = chars[i] - 31.5f;
                } else {
                    fs[i] = chars[i];
                }
            }
            Arrays.sort(fs);
            for (int i = 0; i < fs.length; i++) {
                if (fs[i] % 1 != 0) {
                    chars[i] = (char) (fs[i] + 31.5);
                } else {
                    chars[i] = (char) fs[i];
                }
            }
            return new String(chars);
        }
    }
      

  8.   

    套用8楼的
    public class testSort {

    public String sort(String param){
            char c[]=param.toCharArray();
            String s1;
            String s2;        for(int i=0;i < c.length;i++){
             s1 =String.valueOf(c[0]);
             for(int j=1;j<c.length;j++){
             s2 = String.valueOf(c[j]);
             if(s1.compareToIgnoreCase(s2)>0 || (s1.compareToIgnoreCase(s2)==0 && s1.compareTo(s2)>0)){         s1 = String.valueOf(c[j]);
             c[j] = c[j-1];
             c[j-1] = s1.charAt(0);        
             }
             }
            }
            return new String(c);
        } /**
     * @param args
     */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
            String s="SDsBEaA";
            testSort test=new testSort();
            s=test.sort(s);
            System.out.println(s);
    }}
      

  9.   

    ustbsjl 
    等 级:
     发表于:2007-11-23 09:50:537楼 得分:0 
    给小写的字符减去31.5再用ascii比较,排序就ok 
    =======================================
    顶!好方法
      

  10.   

    12楼的有问题:
    s1 =String.valueOf(c[0]);c[0] 应该为c[i]
    并且该语句应该放入第二个for循环内部
      

  11.   

    本帖最后由 daisy8675 于 2011-06-03 10:20:29 编辑
      

  12.   

    import java.util.Arrays;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;public class StringTest {    /**
         * @param args
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            String str = "aBAaACEbcfgeediFHH";
            
            //转换为小写,供正则匹配替换,大写也行
            String tmp = str.toLowerCase();
            char[] chs = tmp.toCharArray();
            //必须排序,否则正则无法替换,也可能是我不知道怎么写,哪位朋友写写
            Arrays.sort(chs);
           
            tmp = String.valueOf(chs);
            //替换所有重复的字符,替换后的结果为:abcdefghi
            String sigle = tmp.replaceAll("(.).*\\1","$1");
            char[] t = sigle.toCharArray();
            String tmpRes = "";
            for (int i = 0; i < t.length; i++){
                int upCount = getStrRepeat(str,t[i],true);
                int lowCount = getStrRepeat(str,t[i],false);
                String rsUP = getString(String.valueOf(t[i]).toUpperCase(),upCount);
                String rsLow = getString(String.valueOf(t[i]),lowCount);
                tmpRes += (rsUP + rsLow);//大写在前小写在后
            }
            System.out.println(tmpRes);
            //输出:AAaaBbCcdEeeFfgHHi
        }
        
        //获取大小写字母出现的次数
        //true:大写;false:小写
        public static int getStrRepeat(String base,char s,boolean flag){
            Pattern p = null;
            p = flag?Pattern.compile(String.valueOf(s).toUpperCase()):Pattern.compile(String.valueOf(s));
            Matcher m = p.matcher(base);
            int i = 0;
            while(m.find()){
                i++;
            }
            return i;
        }
        //根据字母重复次数构造字符串
        public static String getString(String s,int count){
            if (count == 1)
                return s;
            else if (count == 0)
                return "";
            else
                return s + getString(s,count - 1);
        }
    }
    楼主给分吧
      

  13.   

    9楼的方法不对,得出的结果是:The   reversed   string   is:   AaEBsDS
    并不是所要的结果。
      

  14.   

    package cn;public class Test { /**
     * @param args
     */
    public static void main(String[] args) {
    String   s="SDsBEaA" ;
    char[] c=s.toCharArray();

    for(int i=0;i<c.length;i++)
    {
    int k=i;
    char temp;
    char min='z';
    for(int j=i;j<c.length;j++){
    char temp1=Character.toUpperCase(c[j]);
    if(temp1<min)
    {
    min=temp1;
    k=j;
    }

    }
    if(k!=i){

    temp=c[i];
    c[i]=c[k];
    c[k]=temp;

    }

    }

    for(int i=0;i<c.length-1;i++)
    {
    char temp;
    if(c[i]>c[i+1]&&Character.toUpperCase(c[i])==Character.toUpperCase(c[i+1]))
    {
    temp=c[i];
    c[i]=c[i+1];
    c[i+1]=temp;
    }

    }

    s=new String(c);
    System.out.println(s); }}
      

  15.   

    给小写的字符减去31.5再用ascii比较,排序就ok
    看了半天就这个好!
      

  16.   

    public class CharacterSort { public String stringSort(String str) {
    char[] stringChar = str.toCharArray();
    double[] stringDouble = new double[str.length()];
    int i = 0;
    int j = 0;
    double tempDouble = 0.0d;
    int paramLength = str.length();
    // 下面对小写字母减去31.5
    for (i = 0; i < paramLength; i++) {
    if ((int) stringChar[i] > 96 && (int) stringChar[i] < 123) {
    stringDouble[i] = (double) stringChar[i] - 31.5;
    } else {
    stringDouble[i] = (double) stringChar[i];
    }
    }
    // 下面进行排序 升序
    for (i = 0; i < paramLength - 1; i++) {
    for (j = 0; j < paramLength - i - 1; j++) {
    if (stringDouble[j] > stringDouble[j + 1]) {
    tempDouble = stringDouble[j];
    stringDouble[j] = stringDouble[j + 1];
    stringDouble[j + 1] = tempDouble;
    }
    }
    }
    // 还原小写字母
    for (i = 0; i < paramLength; i++) {
    tempDouble = stringDouble[i] * 10 % 10;
    if (tempDouble > 0.0000001) {// 有小数
    stringDouble[i] = (double) (stringDouble[i] + 31.5);
    }
    stringChar[i] = (char) stringDouble[i]; }
    return new String(stringChar);
    } public static void main(String[] args) {
    // String stringExample =
    // "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
    String stringExample = new String("SDsBEaA");
    CharacterSort characterSort = new CharacterSort();
    System.out.println(stringExample);
    System.out.println(characterSort.stringSort(stringExample));
    }
    }
      

  17.   


    其中的
    if(temp1==temp2){
    temp1=c[i];
    temp2=c[i+1];
    }
    是什么意思呢, 我看了半天也不知道什么意思?
      

  18.   

    package tesstte;public class AscIIsort {
    public static void main(String args[]) {
    String s = "SDsBEaA";
    char[] c = s.toCharArray();
    for (int j = 0; j < c.length; j++) {
    for (int i = 0; i < c.length-j - 1; i++) {
    char temp1 = Character.toUpperCase(c[i]);
    char temp2 = Character.toUpperCase(c[i + 1]); if (temp1==temp2) {
    temp1 = c[i];
    temp2 = c[i + 1];
    } if (temp1 > temp2) {
    char temp = c[i];
    c[i] = c[i + 1];
    c[i + 1] = temp;
    } }
    }
    s = new String(c);
    System.out.println(s); }
    }
      

  19.   

    先判断大小写,再按ASC码进行比较
      

  20.   

    先不区分大小写进行比较,然后,asc码比较.不过还是比较麻烦,因为,排序的时候按照大写asc码排序,如果有和它不区分大小写值相等的字符,再次按照asc码比较,这样可以使得有很多字符的时候,比较规整的,每个字母先排列大写,然后小写.接下来排下一个字母.
      

  21.   

    感觉像是ascii码排序一样......
      

  22.   

    怎么我copy 以上能人编写的程序代码编绎运行都报错啊!!!
      

  23.   

    用集合很好解决啊,面试应该是考你自己定义比较规则的
    import java.util.*;
    public class TestSort{
    public static void main(String args[]){
    String  str = "SDsBEAa";
    char[] chs = str.toCharArray();
    ArrayList<Character> al = new ArrayList<Character>();
    for(char c:chs)
    al.add(c);
    Collections.sort(al,new Comparator<Character>(){
    public int compare(Character ch1,Character ch2){
    char c1 = Character.toUpperCase(ch1);
    char c2 = Character.toUpperCase(ch2);
    return c1-c2;
      }
    } );
    System.out.println(al);
    }
      

  24.   


    import java.util.*;
    public class TestSort{
    public static void main(String args[]){
    String  str = "SDsBEAa";
    char[] chs = str.toCharArray();
    ArrayList<Character> al = new ArrayList<Character>();
    for(char c:chs)
    al.add(c);
    Collections.sort(al,new Comparator<Character>(){
    public int compare(Character ch1,Character ch2){
    char c1 = Character.toUpperCase(ch1);
    char c2 = Character.toUpperCase(ch2);
    return c1-c2;
      }
    } );
    System.out.println(al);
    }
      

  25.   

    很巧妙的方法!!!同理,可以进一步巧妙的去掉小数,
    A-Z 用0开始的偶数来表示,a-z 用1开始的奇数来表示。import java.util.Arrays;public class Main {    public static void main(String[] args) {
            String s = "SDsBEaA";
            char[] carr = s.toCharArray();        for (int i = 0; i < carr.length; i++) {
                if (carr[i] >= 'A' && carr[i] <= 'Z') {
                    carr[i] = (char) ((carr[i] - 'A') * 2);
                } else {
                    carr[i] = (char) ((carr[i] - 'a') * 2 + 1);
                }
            }        Arrays.sort(carr);        for (int i = 0; i < carr.length; i++) {
                if (carr[i] % 2 == 0) {
                    carr[i] = (char) (carr[i] / 2 + 'A');
                } else {
                    carr[i] = (char) (carr[i] / 2 + 'a');
                }
            }        for (char t : carr) {
                System.out.print(t);
            }
        }
    }
      

  26.   

    我那比较器里算法 有点问题,假如小写字母写在前面的话排出来还是在前面,所以要加上一条判断语句,以下是完善的方法import java.util.*;
    public class TestSort{
    public static void main(String args[]){
    String  str = "SDsBEAa";
    char[] chs = str.toCharArray();
    ArrayList<Character> al = new ArrayList<Character>();
    for(char c:chs)
    al.add(c);
    Collections.sort(al,new Comparator<Character>(){
    public int compare(Character ch1,Character ch2){
    char c1 = Character.toUpperCase(ch1);
    char c2 = Character.toUpperCase(ch2);
    if(c1==c2&&ch1>ch2)
    return 1;
    return c1-c2;
      }
    } );
    System.out.println(al);
    }
    }
      

  27.   

    学了几种办法,ascii码减去31.5是什么意思,为什么减31.5.
      

  28.   

    哇,这个居然是偶们的作业题目。 
    一大堆的字符、数字比较操作,整那些花里胡哨的干嘛,看的偶晕乎乎的。实现Comparator接口的45楼,简单易懂才是美,呵呵!支持之!
    Collections.sort(List<T> list, Comparator<? super T> c)
      

  29.   

    学习了下,同时按偶的思路也写个算法,基本也都能看会。
    思路:1.先将字母顺序排好,就是按照AaBbCc...Zz排好。
          2.将接收的元素依次对应排好的顺序,有则打印。由于1的前提可以保证顺序一定正确。
    代码如下:
    import java.util.Scanner;class Paixu{
    void sort(char[] c){
          char[] c1 = new char[100];  
         int i=0,j=0;
          
        for(i=0;i<27;i++)          //先定义位置排好数组c1 (各字母大小写依次)
            {
           c1[2*i]  = (char)('A'+j);
                   c1[2*i+1]= (char)('a'+j);
                   j++;
            }
         
            for(i=0;i<53;i++)          //将接收的数组元素位置匹配到排好的数组里并打印
              for(j=0;j<c.length;j++)
                  if(c1[i]==c[j])
               System.out.println(c1[i]);
        
    }

    }
    public class Asc {
    public static void main(String[] args){
        Scanner sca = new Scanner(System.in);
        String str = sca.next();
        
                new Paixu().sort(str.toCharArray());
         }}
      

  30.   

    大写字母和小写字母哪个ascii大呢
      

  31.   

    public class SortTester {
        public static void main(String[] args) {
            String sequence = "SDsBEaA";
            List<String> list = new LinkedList<String>();        for(char s : sequence.toCharArray()) {
                list.add(String.valueOf(s));
            }        Collections.sort(list, new Comparator<String>() {
                public int compare(String o1, String o2) {                double i1 = (double) o1.toCharArray()[0];
                    double i2 = (double) o2.toCharArray()[0];                if (i1 < 91) {
                        i1 += 31.5f;
                    }                if (i2 < 91) {
                        i2 += 31.5f;
                    }                if (i1 > i2) {
                        return 1;
                    } else if (i1 == i2) {
                        return 0;
                    } else {
                        return -1;
                    }
                }
            });        System.out.println(list.toString());
        }
    }