简体   繁体   中英

Sort only Numeric elements from String Array in java?

I am keen to sort only numeric elements that are in String array. I am doing it in java. Please help me to solve this Problem.

Here is my Problem

For the given set of characters, choose integers only and sort them in descending order and put in their position leaving other characters position intact. The change is position should only be of integers not of other characters.

Sample Input:-
d,1,4,c,9,6
109,87,911,b,645
77,19,#,.,95
8,99,14,2,5,6,49

Sample Output:-
Case #1: d,9,6,c,4,1
Case #2: 911,645,109,b,87
Case #3: 95,77,#,.,19
Case #4: 99,49,14,8,6,5,2

Thank you to all viewer. Please would you all help me to solve this problem in Java

Here is my Code, I have tried So far.

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 = "0123456789";
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;
} 
}

I couldn't figure out what you were trying to do, but here's how I'd do it

  • Extract a List of only the Integers AND create List of indexes at which they occur in original array
  • Sort that List using standard reverse sort
  • Put sorted List values back into the original array, using index List

Working example

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));
    }
}

Output

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM