2015-04-02 3 views
1

Я стараюсь сортировать только числовые элементы, которые находятся в массиве String. Я делаю это в java. Пожалуйста, помогите мне решить эту проблему.Сортировать только Числовые элементы из String Array в java?

Вот моя проблема

Для заданного набора символов, выбрать только целочисленные и отсортировать их в порядке убывания и положить в их положение оставляя позиции других символов нетронутыми. Изменение позиции должно состоять только из целых чисел, отличных от других символов.

Пример ввода: -
д, 1,4, с, 9,6
109,87,911, б, 645
77,19, # 95
8,99,14,2. , 5,6,49

Пример вывода: -
Случай # 1: д, 9,6, с, 4,1
Случай # 2: 911645109, б, 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

+0

Вы должны показать нам некоторый код того, что вы пробовали до сих пор. – WonderWorld

+1

О, извините. Я просто забыл поделиться своим Кодексом. Подожди секунду. Виноват. : D – Poudel

ответ

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

+0

Решает ли ваша проблема ваша проблема? – Adam

+0

Да. Спасибо. – Poudel

Смежные вопросы