Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 对混合数据列表进行排序?_Java_Algorithm_List_Sorting_Collections - Fatal编程技术网

Java 对混合数据列表进行排序?

Java 对混合数据列表进行排序?,java,algorithm,list,sorting,collections,Java,Algorithm,List,Sorting,Collections,今天我接受了一次采访,在采访中,我被要求对一个包含字符串和整数的列表进行排序 输入: 汽车巴士4-5苹果3-1 输出: 苹果巴士-5-1车3 4 一开始我被卡住了,因为我从来没有见过这样的事情,但我试着创建两个子列表,一个包含字符串,另一个包含int。我这样做了,但时间已经到了,我无法完成 此外,我在尝试循环列表的部分遇到了问题,我检查了它的字符串是否大于将元素添加到子列表1,以及它的int是否大于将元素添加到子列表2。我在这里遇到了问题,因为我不知道如何检查元素是string还是int 如果我

今天我接受了一次采访,在采访中,我被要求对一个包含字符串和整数的列表进行排序

输入:

汽车巴士4-5苹果3-1

输出:

苹果巴士-5-1车3 4

一开始我被卡住了,因为我从来没有见过这样的事情,但我试着创建两个子列表,一个包含字符串,另一个包含int。我这样做了,但时间已经到了,我无法完成

此外,我在尝试循环列表的部分遇到了问题,我检查了它的字符串是否大于将元素添加到子列表1,以及它的int是否大于将元素添加到子列表2。我在这里遇到了问题,因为我不知道如何检查元素是string还是int

如果我把这个问题放在了错误的地方,也很抱歉。请随意把这个问题移到正确的地方


谢谢

我将使用两个列表,对它们进行排序,但您必须记住原始顺序,
LinkedList
足以完成该任务

public static String sortString(String input) {
    Scanner s = new Scanner(input);

    LinkedList<String> strings = new LinkedList<String>();
    LinkedList<Integer> integers = new LinkedList<Integer>();
    LinkedList<Boolean> types = new LinkedList<Boolean>();

    while(s.hasNext()) {
        String nextToken = s.next();
        try {
            int nextInteger = Integer.parseInt(nextToken);
            integers.add(nextInteger);
            types.add(true);
        } catch(NumberFormatException e) {
            strings.add(nextToken);
            types.add(false);
        }
    }

    Collections.sort(strings);
    Collections.sort(integers);

    StringBuilder builder = new StringBuilder();

    Iterator<Boolean> iter = types.iterator();

    while(iter.hasNext()) {
        boolean currType = iter.next();
        if (currType) {
            builder.append(integers.remove(0));
        } else {
            builder.append(strings.remove(0));
        }
        if (iter.hasNext()) builder.append(" ");
    }

    return builder.toString();
}
公共静态字符串排序字符串(字符串输入){
扫描仪s=新扫描仪(输入);
LinkedList字符串=新建LinkedList();
LinkedList整数=新LinkedList();
LinkedList类型=新建LinkedList();
而(s.hasNext()){
字符串nextToken=s.next();
试一试{
int-nextoteger=Integer.parseInt(nextToken);
整数.add(nextInteger);
类型。添加(true);
}捕获(数字格式){
strings.add(nextToken);
类型。添加(false);
}
}
Collections.sort(字符串);
集合。排序(整数);
StringBuilder=新的StringBuilder();
迭代器iter=types.Iterator();
while(iter.hasNext()){
布尔currType=iter.next();
如果(当前类型){
builder.append(integers.remove(0));
}否则{
builder.append(strings.remove(0));
}
if(iter.hasNext())builder.append(“”);
}
返回builder.toString();
}

假设
-1
-5
int
一个简单的解决方案:

public String sortStringWithInts(String input){  
        String[] parts = input.split("\\s");  
        List<String> strings = new ArrayList<String>();  
        List<Integer> ints = new ArrayList<Integer>();  
        for(String part:parts){  
            if(isNumber(part)){                 
                 ints.add(Integer.valueOf(part));               
            }  
            else{  
                strings.add(part);  
            }  
        }  
        Collections.sort(strings);  
        Collections.sort(ints);  
        return createResult(strings, ints, parts);           
    }  

    private String createResult(List<String> strings, List<Integer> ints, String[] parts) {  
        StringBuilder result = new StringBuilder();       
        for(String part:parts){  
            if(isNumber(part)){  
                result.append(ints.remove(0)).append(" ");              
            }  
            else{  
                result.append(strings.remove(0)).append(" ");  
            }  
        }  

        return result.toString();  
    }  

    private boolean isNumber(String part) {  
        try{  
            Integer.valueOf(part);  
            return true;  
        }  
        catch(Exception e){  
            return false;  
        }  
    }  
publicstringsortstringwithints(字符串输入){
String[]parts=input.split(\\s”);
列表字符串=新的ArrayList();
List ints=new ArrayList();
对于(字符串部分:部分){
如果(isNumber(part)){
整数相加(整型值(部分));
}  
否则{
字符串。添加(部分);
}  
}  
Collections.sort(字符串);
集合。排序(ints);
返回createResult(字符串、整数、部分);
}  
私有字符串createResult(列表字符串、列表整数、字符串[]部分){
StringBuilder结果=新建StringBuilder();
对于(字符串部分:部分){
如果(isNumber(part)){
result.append(ints.remove(0)).append(“”);
}  
否则{
result.append(strings.remove(0)).append(“”);
}  
}  
返回result.toString();
}  
专用布尔值isNumber(字符串部分){
试试{
整数值(部分);
返回true;
}  
捕获(例外e){
返回false;
}  
}  

注意:输出将是:
apple bus-5-1 car 3 4
,因为
-5<-1
与您的OP不同

Re:检查字符串或int:尝试解析它?什么是“更高”,数字还是字符串?输入结果如何,都是字符串?我要向面试官指出的第一件事是,
-1
也是字符串。。。然后,我将讨论区分差异的方法(可能尝试解析它并
try/catch(numberformatception)
…)@DaveNewton解析正是我想到的。他向我展示了我上面所写的输出。我想他希望我在排序时优先考虑单词而不是数字。他没有说输入是如何产生的。他说是字符串和整数的组合。谢谢你的回答。@durron597解析出现在我的脑海中,但我我想我失去了它,因为时间即将结束,我承受着压力:)而且我想每次尝试解析每个元素都会花费很多时间,所以有没有其他方法?感谢您的回复。为什么是
-1-5
?输出中应该是
-5-1