Java 需要对字符串值进行排序,同时忽略对空字符串值的任何位置更改

Java 需要对字符串值进行排序,同时忽略对空字符串值的任何位置更改,java,string,sorting,Java,String,Sorting,我试图在Java中实现这样一个场景 我有一个数组列表 ["23","5","","","54","20","","","","0"]` ["0","5","","","20","23","","","","54"]. 目前,列表尚未排序,我希望以一种方式对其排序,即保持空字符串的位置 这意味着空字符串不排序,其他值不排序。 示例 ArrayList ["23","5","","","54","20","","","","0"]` ["0","5","","","20","23","","

我试图在Java中实现这样一个场景

我有一个数组列表

["23","5","","","54","20","","","","0"]`
["0","5","","","20","23","","","","54"]. 
目前,列表尚未排序,我希望以一种方式对其排序,即保持空字符串的位置

这意味着空字符串不排序,其他值不排序。 示例 ArrayList

["23","5","","","54","20","","","","0"]`
["0","5","","","20","23","","","","54"]. 
请注意,空字符串的位置(最初位于位置2,3和6,7,8)将在之后保留,并且仅使用非空值进行排序。我正在使用Java,我真的希望有一些想法来开始实现这个需求。我尝试过谷歌,但在这方面找不到领先的机会

请帮忙


提前谢谢。

可能是这样的:(感谢汤姆的有用链接)

String[]arr=新字符串[]{“23”、“5”、“20”、“54”、“20”、“0”、“0”};//原始数组
布尔[]空格=新布尔[arr.length];//指示索引何时包含空空间
字符串[]目标=新字符串[arr.length];//重选阵列
对于(int i=0;i
您可能希望使用以下内容:

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));
    }
}
导入java.util.array;
导入java.util.LinkedList;
导入java.util.TreeSet;
公共类字符串排序{
公共静态void main(字符串[]args){
字符串[]编号=新字符串[]{“23”、“5”、“0”、“54”、“20”、“0”、“0”};
//保存索引,以便能够将排序后的数字放回数组中
LinkedList索引=新建LinkedList();
//保留已解析数字的有序列表
树集=新树集();
//跳过空项,将非空项添加到有序集和索引列表中
for(int i=0;i

由于排序的原因,它在O(nlogn)时间内运行,但这是可行的。

发布您尝试过的代码。这是一段相当长的代码。你为什么不测试一下?或者,如果您已经测试过,为什么会出现语法错误?谢谢。。复制粘贴错误。我可以把它缩短,但更应该保持它的干净和可理解的“复制粘贴错误”?从哪里抄来的?这仍然无法运行。如果未安装Java环境,请尝试以下操作:。