ASCII码排序

半腔热情 提交于 2019-12-18 06:20:23

 

ASCII码排序

描述

    输入m个字符(可以重复)后,按各字符的ASCII码从小到大的顺序输出这m个字符。

输入
第一行输入一个数N,表示有N组测试数据。后面的N行输入多组数据,每组输入数据都是占一行,有m个字符组成,之间无空格。
输出
对于每组输入数据,输出一行,字符中间用一个空格分开。
思路:
方法一:输入一个字符串后利用java自带的库函数转化成字符数组,并利用自带的库函数对字符数组排序,然后输出即可。
方法二:将字符串存入到字符数组之后,从字符数组中的字符进行排序。
代码:
public class SortASCII {
 
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("输入m组测试数据:");
        int m=sc.nextInt();
        String[] str=new String[m];
        System.out.println("要排序的m组ASCII数据为:");
        for(int i=0;i<str.length;i++){    
            str[i]=sc.next();        
        }
        for( int j=0;j<m;j++){
            char ch[]=new char[m];
            ch=order(str[j]);
            System.out.println("这一组ASCII数排列的顺序为:");
            for(int n=0;n<str[j].length();n++){
                
                System.out.print(ch[n]+" ");
            }
            System.out.println();
        }
        
        
    }
    public static char[] order(String str)  
     {  
        //方法一:
//     char[] ch = str.toCharArray();  
//     Arrays.sort(ch);  
//     return ch;  
        //方法二:
        char[] ch = new char[50];
         for(int i=0;i<str.length();i++)
             ch[i] = str.charAt(i);
         for(int j=0;j<ch.length;j++){
             for(int i=0;i<ch.length-1;i++)
                 if(ch[i]>ch[i+1]){
                     char temp = ch[i];
                     ch[i] = ch[i+1];
                     ch[i+1] = temp;
                 }
         }
         for(int i=0;i<ch.length;i++)
             System.out.print(ch[i]+" ");
              System.out.println();
              return ch;
     }   
}

注意:next()与nexLine()的区别:

       next()一定要读取到有效字符后才可以结束输入,对输入有效字符之前遇到的空格键、Tab键或Enter键等结束符,next()方法会自动将其去掉,只有在输入有效字符之后,next()方法才将其后输入的空格键、Tab键或Enter键等视为分隔符或结束符。

        简单地说,next()查找并返回来自此扫描器的下一个完整标记。完整标记的前后是与分隔模式匹配的输入信息,所以next方法不能得到带空格的字符串。

        而nextLine()方法的结束符只是Enter键,即nextLine()方法返回的是Enter键之前的所有字符,它是可以得到带空格的字符串的。

 举例说明:

 public static void main(String[] args) {  
        String s1,s2;  
        Scanner sc=new Scanner(System.in);  
        System.out.print("请输入第一个字符串:");  
        s1=sc.nextLine();  
        System.out.print("请输入第二个字符串:");  
        s2=sc.next();  
        System.out.println("输入的字符串是:"+s1+" "+s2);  
    }  

输出结果为:

请输入第一个字符串:home
请输入第二个字符串:work

输入的字符串是:home work

但如果把程序改一下:

s1=sc.next();  
s2=sc.nextLine();  

运行结果是:
请输入第一个字符串:home
请输入第二个字符串:输入的字符串是:home

        可以看到,nextLine()自动读取了被next()去掉的Enter作为他的结束符,所以没办法给s2从键盘输入值。经过验证,我发现其他的next的方法,如double nextDouble() , float nextFloat() , int nextInt() 等与nextLine()连用时都存在这个问题,解决的办法是:在每一个 next()、nextDouble() 、 nextFloat()、nextInt() 等语句之后加一个nextLine()语句,将被next()去掉的Enter结束符过滤掉。

   Scanner sc=new Scanner(System.in);  
   System.out.print("请输入第一个字符串:");  
      s1=sc.next();  
sc.nextLine();  //过滤掉换行
System.out.print("请输入第二个字符串:");  
s2=sc.nextLine();  
  System.out.println("输入的字符串是:"+s1+" "+s2);  

运行结果是:
请输入第一个字符串:home
请输入第二个字符串:work
输入的字符串是:home work

运行结果:

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!