2016-10-27 20 views
1

「4,100、-2147483647、1」のような文字列を指定すると、「-2147483647,1,4,100」のようにソートしたいと思います。これまではStringを分割しようとしていましたが、分割して生成したStringに対してはparseIntを実行しました。しかし、parseIntはスコープ外の数値を扱うことができないので、NumberFormatExceptionをスローします。これを処理する最も効率的な方法は何でしょうか? (時間、精度...)ありがとう!Javaで最も効率的な文字列で数値をソートする方法

+1

下回ってみhttp://stackoverflow.com/questions/2529045/how-do-i-sort-strings-that-c​​ontain-numbers-in-javaスーパービッグでどのくらい – miqdadamirali

+1

? 「long」bigや「BigInteger」のように大きい? – Vasan

+0

文字通り、出力として、数値が増加する順に数字を列挙する 'String'を出力します。入力の数字はどのように区切られますか? (ランタイムエラーを処理するサポートを是非_cut&pasteしてエラーメッセージ_(必要に応じて_en_に_調整)を貼り付けてください) – greybeard

答えて

4

intに変換すると入力が制限されます。数字を文字列として残すと、20億桁以上の数字を持つことができます。

その後、数値のサイズを比較するアルゴリズムを作成できます。それらが同じサイズの場合は、左から右へ各番号を調べ、どれが最大であるかを調べます。それ以外の場合は、数字の数字が小さくなります。

ネガもチェックしてください。ネガもチェックしてください。

0

数字がintに収まらない場合は、longを試してください。同様に、parseLong

それよりも大きなものが必要な場合は、BigIntegerを使用してください。それはあなたがそれに投げるものを処理することができます。

+0

それでもオーバーフローする可能性があります。 'BigInteger'はそうしないでしょう。 – Andreas

2

あなたの例で指定した数値のうち、整数の範囲外です。次のプログラムは、次のようにあなたが2,147,483,647よりも大きな数を持っている場合は、このプログラムからの出力は....

[-2147483647, 1, 4, 100] 

だろう

public static void main(String[] args) { 
    String s = "4, 100, -2147483647, 1"; 

    String[] strArray = s.split(", "); 

    ArrayList intList = new ArrayList(); 

    for(int i = 0; i < strArray.length; i++) { 
     intList.add(Integer.parseInt(strArray[i])); 
    } 

    Collections.sort(intList); 

    System.out.println(intList); 
} 

...あなたの提供する文字列を解析し、適切に並べ替えます-2,147,483,648より小さい場合は、John KugelmanのようにLongまたはBigIntegerを使用することができます。

0

コード

public static void main(String[] args) { 
    String s = "4, 100, -2147483647, 1"; 

    String[] strArray = s.split(", "); 

    List<BigDecimal> intList = new ArrayList<>(); 

    for (String element : strArray) { 
     intList.add(new BigDecimal(element)); 
    } 

    Collections.sort(intList); 

    System.out.println(intList); 
} 
関連する問題