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

1

Я пытаюсь реализовать такой сценарий на Java.

У меня есть ArrayList

["23","5","","","54","20","","","","0"]'

На данный момент список не отсортирован, я хочу, чтобы отсортировать его таким образом, что позиции пустых строк "" поддерживаются.

Это означает, что пустые строки не сортируются, другие значения. Пример ArrayList

["0","5","","","20","23","","","","54"]. 

Обратите внимание, что позиция пустых строк (первоначально в позиции 2,3 и 6,7,8) сохраняется и сортировка выполняется только с непустыми значениями. Я использую Java, мне действительно понравятся некоторые идеи, чтобы начать реализацию этого требования. Я попробовал Google, но не смог найти этого.

Пожалуйста помоги,

Заранее спасибо.

  • 4
    Опубликуйте код, который вы пробовали.
Теги:
string
sorting

2 ответа

1

Вероятно, вы захотите использовать что-то вроде этого:

import java.util.Arrays;
import java.util.LinkedList;
import java.util.TreeSet;


public class StringSort {

    public static void main(String[] args) {
        String[] numbers = new String[] {"23","5","","","54","20","","","","0"};
        // Save the indices to be able to put the sorted numbers back in the array
        LinkedList<Integer> indices = new LinkedList<>();
        // Keep an ordered list of parsed numbers
        TreeSet<Integer> set = new TreeSet<>();
        // Skip empty entries, add non-empty to the ordered set and the indices list
        for (int i = 0; i < numbers.length; i++) {
            if (numbers[i].equals(""))
                continue;
            set.add(Integer.parseInt(numbers[i]));
            indices.add(i);
        }

        // Put the ordered integers back into the array
        for (int i : set) {
            numbers[indices.pop()] = Integer.toString(i);
        }
        System.out.println(Arrays.toString(numbers));
    }
}

Он работает в O (nlogn) времени из-за сортировки, но это выполнимо.

1

может быть, что-то вроде этого: (Кредиты Тому за его полезную ссылку)

    String[] arr = new String[] { "23","5","","","54","20","","","","0" }; // the original array
    boolean[] space = new boolean[arr.length]; // indicates whenever the index contains an empty space
    String[] target = new String[arr.length]; // the reslted array

    for (int i = 0; i < space.length; i++) // init spaces
    {
        space[i] = arr[i].isEmpty();
    }

    Arrays.sort(arr); // sort the original array

    int index = 0;
    for (int i = 0; i < arr.length; i++)
    {
        if (arr[i].isEmpty()) continue; // just a space ignore that
        index = i; // real values start here
        break;
    }

    for (int i = 0; i < space.length; i++)
    {
        if (space[i] == true)
        {
            target[i] = ""; // restore space
        }
        else
        {
            target[i] = arr[index]; index++;
        }
    }
  • 0
    Это довольно длинный код. Почему ты не проверил это? Или, если вы проверили его, почему в нем есть синтаксические ошибки?
  • 0
    спасибо .. ошибки копирования-вставки. я могу сделать его короче, но лучше держать его чистым и понятным
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню