题解 | #字符串排序#
字符串排序
http://www.nowcoder.com/practice/5190a1db6f4f4ddb92fd9c365c944584
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.function.BiConsumer; public class Main{ public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
InputStreamReader reader = new InputStreamReader(System.in);
try(BufferedReader bf = new BufferedReader(reader)){
String line = bf.readLine();
char[] chars = line.toCharArray();
//用于接受结果字符数组 再进行索引拼接
ArrayList<Character> characters = new ArrayList<>();
LinkedHashMap<Integer, Character> map = new LinkedHashMap<>();
//查找非字母的位置 并记录其值 后期直接插入
for (int i = 0; i < chars.length; i++) {
if (!Character.isLetter(chars[i]))map.put(i,chars[i]);
}
//正则去除非字母元素
String line_letter = line.replaceAll("[^a-zA-Z]", "");
char[] charArray = line_letter.toCharArray();
char tmp = 0;
//冒泡
for (int i = 0; i < charArray.length-1; i++) {
for (int j = 0; j < charArray.length-1; j++) {
if (Character.toLowerCase(charArray[j])>Character.toLowerCase(charArray[j+1])){
tmp = charArray[j];
charArray[j]= charArray[j+1];
charArray[j+1] = tmp;
}
}
}
for (int i = 0; i < charArray.length; i++) {
characters.add(charArray[i]);
}
//遍历 存储非字母的Map key:非字母在原字符串的索引 value:非字符本身
map.forEach(new BiConsumer<Integer, Character>() {
@Override
public void accept(Integer key, Character value) {
characters.add(key,value);
}
});
characters.forEach(item->sb.append(item));
System.out.println(sb.toString());
}catch (IOException e){
System.out.println(e.getMessage());
}
}
}