题目描述:
编写一个程序,将输入字符串中的字符按如下规则排序。
规则 1 :英文字母从 A 到 Z 排列,不区分大小写。
如,输入: Type 输出: epTy
规则 2 :同一个英文字母的大小写同时存在时,按照输入顺序排列。
如,输入: BabA 输出: aABb
规则 3 :非英文字母的其它字符保持原来的位置。
如,输入: By?e 输出: Be?y
样例:
输入:
A Famous Saying: Much Ado About Nothing(2012/8).
输出:
A aaAAbc dFgghh : iimM nNn oooos Sttuuuy (2012/8).
输入描述:
输出描述:
示例1:
输入:
A Famous Saying: Much Ado About Nothing (2012/8).
输出:
A aaAAbc dFgghh: iimM nNn oooos Sttuuuy (2012/8).
代码:
import java.util.Scanner;
public class Main {
public static void main ( String[] args ) {
Scanner in = new Scanner( System.in );
while( in.hasNextLine() ) {
String s = in.nextLine();
String str[] = new String[ s.length( ) ];
String sortStr[] = new String[ s.length( ) ];
int j = 0;
for ( int i = 0 ; i < s.length() ; i++ ) {
if ( ( s.charAt( i ) >= 65 && s.charAt( i ) <= 90 ) || ( s.charAt( i ) >= 97 && s.charAt( i ) <= 122 ) ) {
str[ j ] = String.valueOf( s.charAt( i ) );
j++;
}
}
String str1[] = new String[ j ];
for ( int i = 0 ; i < j ; i++ ) {
str1[ i ] = str[ i ];
}
sort( str1 );
for ( int i = 0 ; i < s.length(); i++ ) {
if ( !( ( s.charAt( i ) >= 65 && s.charAt( i ) <= 90 ) || ( s.charAt( i ) >= 97 && s.charAt( i ) <= 122 ) ) ) {
sortStr[ i ] = String.valueOf( s.charAt( i ) );
}
}
int k = 0;
for( int i = 0 ; i < str1.length && k < s.length() ; k++ ) {
if ( sortStr[ k ] == null ) {
sortStr[ k ] = str1[ i ];
i++;
}
}
for ( String e : sortStr ) {
System.out.print( e );
}
System.out.println( );
}
in.close();
}
static void sort( String[] str ) {
int j;
for ( int i = 1 ; i < str.length ; i++ ) {
String temp = str[ i ];
for ( j = i ; j > 0 && sortAa( temp.charAt( 0 ) ) < sortAa( str[ j - 1 ].charAt( 0 ) ) ; j-- ) {
str[ j ] = str[ j - 1 ];
}
str[ j ] = temp;
}
}
static int sortAa( Character c ) {
if ( c >= 65 && c <= 90 ) {
return c + 32;
}
else {
return c;
}
}
}