1

今日面接があり、文字列と整数を含むリストをソートするように求められました。

入力:

カーバス 4 -5 アップル 3 -1

出力:

りんごバス -5 -1 車 3 4

そのようなものを見たことがなかったので、最初は立ち往生しましたが、私がやろうとしたことは、2つのサブリストを作成することです。1つは文字列を保持し、もう1つはintを保持します。 .

また、リストをループして、サブリスト1に要素を追加するよりも文字列であるかどうか、サブリスト2に要素を追加するよりもintであるかどうかを確認しようとした部分で行き詰まりました。要素は String または Int です。

また、この質問を間違ったセクションまたは何かに投稿した場合は申し訳ありません。この質問を正しいセクションに移動してください。

ありがとうございました

4

2 に答える 2

2

2 つのリストを使用して並べ替えますが、元の順序を覚えておく必要がありLinkedList<Boolean>ます。そのタスクには a で十分です。

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();
}
于 2012-11-19T21:56:27.200 に答える
1

-1-5int単純な解決策 であると仮定します。

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

注:出力は次のようになります:OPのようではありませapple bus -5 -1 car 3 4-5 < -1

于 2012-11-19T21:57:10.947 に答える