2015-04-02 71 views
1

我很想排序字符串數組中的數字元素。我正在用java做它。請幫我解決這個問題。僅從java中的字符串數組中排序數字元素?

這裏是我的問題

對於給定的字符集,只能選擇整數和降序排列出來,把他們的位置留給其他字符的位置不變。 改變位置應該只是不是其他字符的整數。

樣品輸入: -
d,1,4,C,9,6
109,87,911,B,645
77,19,#,95
8,99,14,2。 ,5,6,49

樣本輸出: -
情況#1:d,9,6,C 4,1
情況#2:911645109,b,87
情況#3:95, 77,#,...,19
案例#4:99,49,14,8,6,5,2

謝謝各位觀衆。請大家幫我解決這個問題Java

這是我的代碼,我已經嘗試到目前爲止。

import java.util.Arrays; 
import java.util.Iterator; 
import java.util.ArrayList; 

class alphaNumeric { 

public static void main(String a[]) { 

String s1[] = new String[9]; 
ArrayList l_numList = new ArrayList(); 
ArrayList l_strList = new ArrayList(); 

s1[0] = "1000.1"; 
s1[1] = "100"; 
s1[2] = "xBC100"; 
s1[3] = "XBB100"; 
s1[4] = "TEST"; 
s1[5] = "AYZ2100"; 
s1[6] = "99"; 
s1[7] = "90"; 
s1[8] = "1000"; 
System.out.print("Before sorting, numbers are "); 
for(int i = 0; i < s1.length; i++) 
{ 
    System.out.print(s1[i]+" "); 
} 
System.out.println();   



for (int i = 0; i < s1.length; i++) { 
    if (isNumber(s1[i])) { 
     l_numList.add(s1[i]); 
    } else { 
     l_strList.add(s1[i]); 
    } 
} 
Object[] l_objArray = (Object[]) l_numList.toArray(); 
int l_intArray[] = new int[l_objArray.length]; 
for (int i = 0; i < l_objArray.length; i++) { 
    l_intArray[i] = Integer.parseInt((String) l_objArray[i]); 
} 
Arrays.sort(l_intArray); 
for (int i = 0; i < l_intArray.length; i++) { 
    System.out.println("after Numsort: " + l_intArray[i]); 
} 

System.out.print("After sorting, numbers are "); 
for(int i = 0; i < l_intArray.length; i++) 
{ 
    System.out.print(l_intArray[i]+" "); 
} 
Object[] l_strArray = (Object[]) l_strList.toArray(); 
Arrays.sort(l_strArray); 
for (int i = 0; i < l_strArray.length; i++) { 
    System.out.println("after Strsort: " + l_strArray[i]); 
} 
} 

static boolean isNumber(String s) { 
String validChars = ""; 
boolean isNumber = true; 

for (int i = 0; i < s.length() && isNumber; i++) { 
    char c = s.charAt(i); 
    if (validChars.indexOf(c) == -1) { 
     isNumber = false; 
    } else { 
     isNumber = true; 
    } 
} 
return isNumber; 
} 
} 
+0

請你嘗試之前,我們可以幫助你! – StackFlowed 2015-04-02 18:28:50

+0

你必須向我們展示一些你到目前爲止嘗試過的代碼。 – WonderWorld 2015-04-02 18:29:20

+1

對不起。我只是忘了分享我的代碼。等一下。我的錯。 :D – Poudel 2015-04-02 18:32:25

回答

0

我無法弄清楚你試圖做的,但在這裏就是我會做它

  • 只提取整數列表創建索引的表在哪它們發生在原始數組列表使用標準反向排序
  • 穿戴排序列表中的值返回到原來的陣列
  • 排序,使用索引列表

工作實例

public class SortOnlyNumbers { 
    public static void main(String[] args) { 
     sortOnlyNumbers(new String[] { "d", "1", "4", "c", "9", "6" }); 
     sortOnlyNumbers(new String[] { "109", "87", "911", "b", "645" }); 
     sortOnlyNumbers(new String[] { "77", "19", "#", ".", "95" }); 
     sortOnlyNumbers(new String[] { "8", "99", "14", "2", "5", "6", "49" }); 
    } 

    private static void sortOnlyNumbers(String[] array) { 
     List<Integer> indexes = new ArrayList<Integer>(); 
     List<Integer> numbers = new ArrayList<Integer>(); 
     for (int i = 0; i < array.length; i++) { 
      try { 
       numbers.add(Integer.parseInt(array[i])); 
       indexes.add(i); 
      } catch (NumberFormatException e) { 
       // don't care 
      } 
     } 
     Collections.sort(numbers, Collections.reverseOrder()); 
     for (int i = 0; i < numbers.size(); i++) { 
      array[indexes.get(i)] = String.valueOf(numbers.get(i)); 
     } 
     System.out.println(Arrays.toString(array)); 
    } 
} 

輸出

[d, 9, 6, c, 4, 1] 
[911, 645, 109, b, 87] 
[95, 77, #, ., 19] 
[99, 49, 14, 8, 6, 5, 2] 
+0

謝謝亞當。 – Poudel 2015-04-04 10:42:58

+0

這是否解決您的問題? – Adam 2015-04-04 16:26:25

+0

是的。謝謝。 – Poudel 2015-04-05 12:16:52