2017-01-10 6 views
-3

私のデータが次のような場合はComparatorを使用して文字列を並べ替える際に問題があります: {7.5mg/5ml、5mg、5mg/5ml、10mg、場合Iソート昇順 {10ミリグラム、5ミリグラム中5mg/15ミリリットル、5ミリグラム/ 5 mlのサンプル、セクション}数字と特殊文字を含む文字列のコンパレータを使用した並べ替え

Iは、以下のコード

​​

を試みたが、次の出力を取得してい、5mg/5ml、5mg/15ml、5mg/5ml、7.5mg/5ml、サンプル、セクション}

上記の出力では、分母は5mgシリーズでは適切にソートされていません。ソートは、5mgよりも前に10mgが表示されているような文字列ソートのように行われます。必要な出力は次のとおり

{5ミリグラム、5ミリグラム/ 5 mlの5ミリグラム/ 5 mlの5ミリグラム/ 15ミリリットル、7.5 MG/5 mlの10 mgの試料、セクション}

お願い私はこの問題を解決する。

+2

いいえ、私たちはあなたの仕事をしません。あなたは自分のコードを書くことから始めます。あなたが特定の問題を抱えているときは、あなたのコードと、あなたを助けるために必要なすべての詳細を質問に書いてください。このコミュニティの仕組みを理解するには[ヘルプ]を参照してください。どのように/何を求めるか。 – GhostCat

+0

コンパイラで辞書順を使うべきだと言った順番で出力したいと思っています。 –

+0

コードを入力してください。 – Dreamer

答えて

1

あなたはちょうど彼らがアクセントを持っていなかったかのように文字列をソートしたい場合は、以下を使用することができます。

Collections.sort(strs, new Comparator<String>() { 
    @Override 
    public int compare(String o1, String o2) { 
     o1 = Normalizer.normalize(o1, Normalizer.Form.NFD); 
     o2 = Normalizer.normalize(o2, Normalizer.Form.NFD); 
     return o1.compareTo(o2); 
    } 
}); 

あなたはjava.text.Collator上に読みたくなり、より洗練されたユースケースのために。ここで は例です:

Collections.sort(strs, new Comparator<String>() { 
    @Override 
    public int compare(String o1, String o2) { 
     Collator usCollator = Collator.getInstance(Locale.US); 
     return usCollator.compare(o1, o2); 
    } 
}); 

カスタムオーダー:

最終文字列ORDER = "qazwsxedcvfrtgbnhyujmkiolp"。

は、Arrays.sort(STR、新しいコンパレータ(){

@Override 
public int compare(String o1, String o2) { 
    return ORDER.indexOf(o1) - ORDER.indexOf(o2) ; 
} 

})。

+0

あなたの応答に感謝ジェイ。しかし、ノーマライザーを使用すると、{10mg、5mg、5mg/5ml、5mg/15ml、5mg/5ml、7.5mg/5ml、サンプル、セクション}のような出力が得られます。代わりに7.5 mg/5 mlの後に10 mgを表示する必要があります。また、「/」の後の分母部分も順番に表示されません。 – User123

関連する問題