编写一个程序,将输入字符串中的字符按如下规则排序。
规则 1 :英文字母从 A 到 Z 排列,不区分大小写。
如,输入: Type 输出: epTy
规则 2 :同一个英文字母的大小写同时存在时,按照输入顺序排列。
如,输入: BabA 输出: aABb
规则 3 :非英文字母的其它字符保持原来的位置。
如,输入: By?e 输出: Be?y
数据范围:输入的字符串长度满足
编写一个程序,将输入字符串中的字符按如下规则排序。
规则 1 :英文字母从 A 到 Z 排列,不区分大小写。
如,输入: Type 输出: epTy
规则 2 :同一个英文字母的大小写同时存在时,按照输入顺序排列。
如,输入: BabA 输出: aABb
规则 3 :非英文字母的其它字符保持原来的位置。
输入字符串
输出字符串
A Famous Saying: Much Ado About Nothing (2012/8).
A aaAAbc dFgghh: iimM nNn oooos Sttuuuy (2012/8).
import java.util.ArrayList; import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Scanner; import java.util.stream.Collectors; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 String val = in.nextLine(); char[] cs = val.toCharArray(); Map<Integer, String> map = new HashMap(); List<Character> li = new ArrayList(); for (int i = 0 ; i < cs.length; i++) { if ((cs[i] < 'a' || cs[i] > 'z') && (cs[i] < 'A' || cs[i] > 'Z')) { map.put(i, String.valueOf(cs[i])); } else { li.add(cs[i]); } } li.sort(new Comparator<Character>() { public int compare(Character o1, Character o2) { return Character.toLowerCase(o1) - Character.toLowerCase(o2); } }); StringBuilder result = new StringBuilder(); for (int i = 0; result.length() < val.length(); ) { if (map.containsKey(result.length())) { result.append(map.get(result.length())); } else if (i < li.size()) { result.append(li.get(i)); i++; } } System.out.print(result.toString()); } }
import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); String str = in.nextLine(); List<Character> list = new ArrayList<>(); for(char c: str.toCharArray()){ if(Character.isLetter(c)){ list.add(c); } } list.sort(new Comparator<Character>(){ public int compare(Character o1, Character o2){ return Character.toLowerCase(o1)- Character.toLowerCase(o2); } }); StringBuilder builder = new StringBuilder(); for(int i=0,j=0;i<str.length();i++){ if(Character.isLetter(str.charAt(i))){ builder.append(list.get(j++)); } else { builder.append(str.charAt(i)); } } System.out.println(builder.toString()); } }
import java.util.*; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 while (in.hasNextLine()) { // 注意 while 处理多个 case char[] charArray = in.nextLine().toCharArray(); LinkedHashMap<Integer, Character> map = new LinkedHashMap<>(); ArrayList<Character> arr = new ArrayList<>(); //将非字母字符存入map中,字母字符存入ArrayList中 for (int i = 0; i < charArray.length; i++) { if ((charArray[i] < 'A' || charArray[i] > 'z') ||((charArray[i] > 'Z') && charArray[i] < 'a' ) ){ map.put(i,charArray[i]); continue; } arr.add(charArray[i]); } //对ArrayList中的字母忽视大小写排序 Collections.sort(arr, new Comparator<Character>() { @Override public int compare(Character x, Character y) { return Character.compare(Character.toLowerCase(x), Character.toLowerCase(y)); } }); //对结果进行拼接 StringBuffer stringBuffer = new StringBuffer(); int index = 0; for (int i = 0; i < charArray.length; i++) { if (map.get(i) != null &&map.get(i) == charArray[i]){ stringBuffer.append(charArray[i]); }else { stringBuffer.append(arr.get(index)); index++; } } System.out.println(stringBuffer); } } }
public static String sortWords(String words) { char[] c1 = words.toCharArray(); int k = 0; Character[] c = words.replaceAll("[^a-zA-Z]", "") .chars () .mapToObj (a -> (char) a) .toArray (Character []::new); Arrays.sort (c, (x, y) -> { return Character.toLowerCase (x) - Character.toLowerCase (y); }); for (int i = 0 ; i < c1.length; i++) { if (Character.isLetter(c1[i])) { c1[i] = c[k++]; } } return new String(c1); }
import java.util.*; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); String str = in.nextLine(); String[] strs = new String[str.length()]; for (int i = 0; i < str.toCharArray().length; i++) { strs[i] = String.valueOf(str.toCharArray()[i]); } LinkedHashMap<Integer, String> map = new LinkedHashMap<>(); ArrayList<String> list = new ArrayList<>(); for (int i = 0; i < strs.length; i++) { if (!strs[i].matches("[A-Za-z]")) { map.put(i, strs[i]); } else { list.add(strs[i]); } } for (int i = 0; i < list.size() - 1; i++) { for (int j = 0; j < list.size() - 1 - i; j++) { String tmp = ""; if (list.get(j).compareToIgnoreCase(list.get(j + 1)) > 0) { tmp = list.get(j); list.set(j, list.get(j + 1)); list.set(j + 1, tmp); } } } Iterator<Map.Entry<Integer, String>> iterator = map.entrySet().iterator(); while (iterator.hasNext()) { Map.Entry<Integer, String> next = iterator.next(); list.add(next.getKey(), next.getValue()); } for (String s : list) { System.out.print(s); } } }
import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in=new Scanner(System.in); String str=in.nextLine(); int len=0; for(int i=0;i<str.length();i++){ if((str.charAt(i)>='A'&&str.charAt(i)<='Z')|| (str.charAt(i)>='a'&&str.charAt(i)<='z')){ len++; } } String arr[]=new String[len]; int l=0; for(int i=0;i<str.length();i++){ if((str.charAt(i)>='A'&&str.charAt(i)<='Z')|| (str.charAt(i)>='a'&&str.charAt(i)<='z')){ arr[l]=String.valueOf(str.charAt(i)); l++; } } String arr2[]=new String[len]; int index=0; for(int i=65;i<=90;i++){ for(int j=0;j<len;j++){ if(arr[j].charAt(0)==(char)i||arr[j].charAt(0)==(char)(i+32)){ arr2[index]=arr[j]; index++; } } } int flag=0; for(int i=0;i<str.length();i++){ if((str.charAt(i)>='A'&&str.charAt(i)<='Z')|| (str.charAt(i)>='a'&&str.charAt(i)<='z')){ System.out.print(arr2[flag]); flag++; }else { System.out.print(str.charAt(i)); } } } }
import java.util.Scanner; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String line = br.readLine(); char[] chars = line.toCharArray(); StringBuilder sb = new StringBuilder(); // 按照排序后的字符顺序,在字符串中寻找,如果找到,则添加到sb中 for (int i = 'A'; i <= 'Z'; i++) { char c = (char) i; for (int j = 0; j < chars.length; j++) { if (c == chars[j] || chars[j] == c - 'A' + 'a') { sb.append(chars[j]); } } } // 非字符的插入到对应的位置上 for (int i = 0; i < chars.length; i++) { if (!((chars[i] >= 'a' && chars[i] <= 'z') || (chars[i] >= 'A' && chars[i] <= 'Z'))) { sb.insert(i, chars[i]); } } // 打印输出 System.out.println(sb.toString()); } }
import java.util.Comparator; import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); String str = in.nextLine(); java.util.List<String> list = new java.util.ArrayList<>(); java.util.List<String> listNoAlpher = new java.util.ArrayList<>(); Tuple[] tuples = new Tuple[26]; String copy = ""; boolean[] bitmap = new boolean[str.length()]; for(int i=0;i<str.length();i++){ char c = str.charAt(i); boolean lower = c>='a'&&c<='z'; boolean upper = c>='A'&&c<='Z'; if(lower||upper){ bitmap[i] = false; if(upper){ c = (char)(c+32); } int index = c-97; if(tuples[index]==null){ tuples[index] = new Tuple(); } tuples[index].list.add(String.valueOf(str.charAt(i))); continue; } listNoAlpher.add(String.valueOf(str.charAt(i))); bitmap[i] = true; } java.util.List<String> orderList = new java.util.ArrayList<>(); for(Tuple t:tuples){ if(t==null){ continue; } for(String s:t.list){ orderList.add(s); } } String s=""; for(int i=0;i<bitmap.length;i++){ if(!bitmap[i]){ s+=orderList.remove(0); }else{ s+=listNoAlpher.remove(0); } } System.out.println(s); in.close(); } static class Tuple{ java.util.List<String> list = new java.util.ArrayList<>(); } }
import java.util.*; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); String str = in.nextLine(); char[] arr = str.toCharArray(); // 存放排序的char LinkedList<Character> list = new LinkedList<>(); // 存放特殊字符的 下标以及字符 Map<Integer, Character> map = new HashMap<>(); for (int i = 0; i < arr.length; i++) { // 确定 是大小写字母 if (('A' <= arr[i] && arr[i] <= 'Z') || ('a' <= arr[i] && arr[i] <= 'z')) { // 如果 list长度为0 直接方第一个 if (list.size() == 0) { list.add(0, arr[i]); continue; } // 将大写字母转变为小写字母 (也可以是将小写字母转变为大写字母) char c = arr[i]; if ('A' <= c && c <= 'Z') { c = (char) (c + 32); } // 从后向前 (也可以是从前往后) for (int j= list.size() -1; j >= 0; j--) { // 将List中的大写字母转变为小写字母 char c1 = list.get(j); if ('A' <= c1 && c1 <= 'Z') { c1 = (char) (c1 + 32); } // arr 和 list比大小 进行存放 if (c >= c1) { int n = 1; list.add(j+n, arr[i]); break; } else if (j == 0 && c1 > c) { // 如果比较到 j == 0 也没有找到c >= c1 // 说明c1最小直接放在第一位 list.addFirst(arr[i]); } } } else { // 非 大小写字母进行存储 map map.put(i, arr[i]); } } // 特殊字符按照下标排序 List<Integer> keyList = new ArrayList<>(map.keySet()); keyList.sort((a, b) -> a.compareTo(b)); // 将特殊字符放到之前下标的位置 keyList.forEach(index -> { list.add(index, map.get(index)); }); // 输出 StringBuilder builder = new StringBuilder(); list.forEach( item -> { builder.append(item); }); System.out.print(builder.toString()); } }
import java.util.*; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); StringBuilder str = new StringBuilder(in.nextLine()); //存在乱序问题 // for (int a = 0; a < str.length(); a++) { // for (int i = 0; i < str.length() - 1; i++) { // Character ch1 = str.charAt(i); // if (!Character.isLetter(ch1)) { // continue; // } // ch1 = Character.toLowerCase(ch1); // for (int j = i + 1; j < str.length(); j++) { // Character ch2 = str.charAt(j); // if (!Character.isLetter(ch2)) { // continue; // } // ch2 = Character.toLowerCase(ch2); // if (ch2 < ch1) { // Character t = str.charAt(i); // str.setCharAt(i, str.charAt(j)); // str.setCharAt(j, t); // } // } // } // } for (int a = 0; a < str.length(); a++) { for (int i = 0; i < str.length() - 1; i++) { Character ch1 = str.charAt(i); if (!Character.isLetter(ch1)) { continue; } //找到前一个字母 继续找之后的第一个字母 for (int j = i + 1; j < str.length(); j++) { Character ch2 = str.charAt(j); if (!Character.isLetter(ch2)) { //没有找到之后的第一个字母,继续 continue; } else { //找到了之后的第一个字母 ch1 = Character.toLowerCase(ch1); ch2 = Character.toLowerCase(ch2); if (ch2 < ch1) { //如果后面的小 交换 Character t = str.charAt(i); str.setCharAt(i, str.charAt(j)); str.setCharAt(j, t); } break; } } } } System.out.println(str); } }
import java.util.Scanner; import java.util.LinkedHashMap; import java.util.ArrayList; import java.util.Set; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 while (in.hasNextLine()) { // 注意 while 处理多个 case String input = in.nextLine(); // LinkedHashMap用来存放非英文字母和它的初始位置 LinkedHashMap<Integer, Character> map = new LinkedHashMap<Integer, Character>(); // ArrayList用来存放英文字母,使用类冒泡排序进行排序(认为字母大小写相等) ArrayList<Character> list = new ArrayList<Character>(); for (int i = 0; i < input.length(); i++) { char tempCh = input.charAt(i); if ((tempCh >= 'A' && tempCh <= 'Z') || (tempCh >= 'a' && tempCh <= 'z')) { list.add(Character.valueOf(tempCh)); } else { map.put(Integer.valueOf(i), Character.valueOf(tempCh)); } } // System.out.println(list); //冒泡排序 int length = list.size(); for (int i = 0; i < length - 1; i++) { for (int j = 0; j < length - 1 - i; j++) { Character tempC = null; if (compare(list.get(j), list.get(j + 1)) > 0) { tempC = list.get(j); list.set(j, list.get(j + 1)); list.set(j + 1, tempC); } } } // System.out.println(list); // System.out.println(map); Set<Integer> TS = map.keySet(); for (Integer i : TS) { int n = i.intValue(); list.add(n, map.get(i)); } // System.out.println(list); for (int i = 0; i < list.size(); i++) { System.out.print(list.get(i)); } } } // 比较两个字母大小,c1>c2,返回正数,c1=c2,返回0,c1<c2,返回负数 //规定 A=a A<b B>a a<C public static int compare(Character c1, Character c2) { int result; char ch1 = c1.charValue(); char ch2 = c2.charValue(); //将小写字符转换为大写字符 if (ch1 >= 'a' && ch1 <= 'z') { ch1 = (char)(ch1 - 32); } if (ch2 >= 'a' && ch2 <= 'z') { ch2 = (char)(ch2 - 32); } return ch1 - ch2; } }
public class Test04 { public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 while (in.hasNextLine()) { // 注意 while 处理多个 case char[] chars = in.nextLine().toCharArray(); char[] result = new char[chars.length]; LinkedList<Character> list = new LinkedList<>(); //将字母放入list中,非字母按原位置放入result数组中 for (int i = 0; i < chars.length; i++) { if(!Character.isLetter(chars[i])){ result[i] = chars[i]; }else{ list.add(chars[i]); } } //将字母排序:按照小写顺序排序,字母相同,list本身按照输入顺序添加,位置不变。 list.sort(new Comparator<Character>() { @Override public int compare(Character o1, Character o2) { return Character.toLowerCase(o1)-Character.toLowerCase(o2); } }); //将排序好的字母按顺序放入result数组中。char[]初始值为0。 for (int i = 0; i < result.length; i++) { if(result[i]==0){ result[i]= list.pop(); } } System.out.println(new String(result)); } } }
public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 while (in.hasNextLine()) { // 注意 while 处理多个 case String string = in.nextLine(); int length = string.length(); String[] strs = new String[26]; String[] cs = new String[length]; for (int i = 0; i < length; i++) { char c = string.charAt(i); String s = string.substring(i, i + 1); String xs = s.toLowerCase(); char[] chars = xs.toCharArray(); int index = chars[0] - 'a'; if (Character.isLetter(c)) { strs[index] = strs[index] == null ? s : strs[index] + s; } else { cs[i] = s; } } String s = ""; for (int i = 0; i < strs.length; i++) { String str = strs[i]; if (str != null) { s = s == "" ? strs[i] : s + strs[i]; } } int i = 0; while (i < length) { String str = cs[i]; if (str != null) { String s1 = s.substring(0, i); String s2 = s.substring(i, s.length()); s = s1 + str + s2; } i++; } System.out.print(s); } } }
// 使用插入法解题 import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 while (in.hasNext()) { // 注意 while 处理多个 case String a = in.nextLine(); String b = new String(); int length = a.length(); StringBuilder sb = new StringBuilder(); // 收集所有的字母 for (int i = 0; i < length; i++) { char c = a.charAt(i); if (('A' <= c && c <= 'Z') || ('a' <= c && c <= 'z')) { int aaa = (c > 'Z') ? c - 'a' : c - 'A'; int lengthB = b.length(); int j = 0; // 收集字母的时候顺便排序,使用插入法 for (; j < lengthB; j++) { char d = b.charAt(j); int bbb = (d > 'Z') ? d - 'a' : d - 'A'; if (bbb > aaa) { String str1 = b.substring(0, j); String str2 = b.substring(j); sb.append(str1); sb.append(c); sb.append(str2); b = sb.toString(); sb = new StringBuilder(); break; } } if (j >= lengthB) { b = b + c; } } } // 输出,字母选择排序后的字符串中的字母,特殊字符直接输出 for (int i = 0, j = 0; i < length; i++) { char c = a.charAt(i); if (('A' <= c && c <= 'Z') || ('a' <= c && c <= 'z')) { System.out.printf(String.valueOf(b.charAt(j))); j++; } else { if ('%' == c) { System.out.printf("%%"); } else { System.out.printf(String.valueOf(c)); } } } System.out.printf("\n"); } } }