對一個只包含數字和小寫字母的字串中的正整數數字子串按數字大小進行升序排序,其余字符的相對位置保持不變,只在原數字子串的上進行變動,比如字串為“aaa77xxxx88jj44”,進行排序后的結果是“aaa44xxxx77jj88”,非數字子串”aaa”、”xxxx”和”jj”的相對位置保持不變。
需要考慮:
(1)整數溢位,比如數字串為:”99999999999999999999999999999999”,不能把子串轉化成整數相比;
(2)首位是0的數字串的處理,比如“00000000000000006”是小于“7”的。
用Java撰寫演算法實作排序并輸出經過排序的字串。
如何將字串的數字和字母分別放到兩個陣列中,還要排序完它們的位置不變啊

uj5u.com熱心網友回復:
public static void main(String[] args) {
String str = "aaa77xxxx88jj44kk003";
StringBuilder sb = new StringBuilder();
StringBuilder sbNum = new StringBuilder();
List<String> list = new ArrayList<>();
for (char ch1 : str.toCharArray()){
if (!isNum(ch1)){
if (sbNum.length()>0){
sb.append("%s");
list.add(sbNum.toString());
sbNum.setLength(0);
}
sb.append(ch1);
continue;
}
sbNum.append(ch1);
}
if (sbNum.length()>0){
list.add(sbNum.toString());
sb.append("%s");
sbNum.setLength(0);
}
Map<String,String> map = new TreeMap<>();
int start = 0;
for (String str1:list){
start = 0;
for (char ch:str1.toCharArray()){
if (ch == '0'){
start++;
continue;
}
break;
}
map.put(str1.substring(start),null);
}
System.out.println(sb.toString());
String format = String.format(sb.toString(),new ArrayList<>(map.keySet()).toArray() );
System.out.println(format);
}
static boolean isNum(char ch){
return ch>='0' && ch<='9';
}
結果;
aaa3xxxx44jj77kk88
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/276826.html
標籤:Java相關
