見つける
結果を並べ替えるには、最初にすべてを見つける必要があります。事前にすべての結果がわからない場合は、部分的にソートされたリストを作成できます。したがって、次のようなものになります。
List<Integer> results = new ArrayList<Integer>();
while (there are more results) { // here you ask the regex if it found some more item
// add integer to results
String found = ... // here you grab the string you've just found
results.add(Integer.parseInt(found)); // convert the string to integer and add to list
}
見つかった文字列は整数としての意味が大きいため、直接整数に変換していることに注意してください。何らかの理由で文字列が必要な場合は、[OK]をクリックし、List<String>
変換しないでください。
並べ替え
ソートされていないリストを作成したら、それをソートする必要があります。いくつかの方法があり、Javaは1つの非常に簡単な方法を実装しています。2つのアイテム間の比較を行わないため、任意のタイプの並べ替えを行うことができます。これは、ソート方法を定義するために実装する必要がある唯一の部分です。そして、あなたはします:
Collections.sort(results, comparator);
このメソッドは、マージソートを実装し(私が間違っていない場合)、2つの要素を比較する必要があるたびに提供するコンパレーターに要求します。このコンパレータは、結果の要素のタイプであるComparator<T>
インターフェイスを実装する必要があります。T
それらが整数の場合、コンパレータはすでに「自然な」順序になっているため、コンパレータは必要ありません。
Collections.sort(results);
ただし、特別な順序(整数で表された値に従って文字列を順序付けるなど)が必要な場合は、独自のコンパレータを使用できます。
Collections.sort(results, new Comparator<String>() {
public int compare(String a, String b) {
int valueA = Integer.parseInt(a);
int valueB = Integer.parseInt(b);
return valueA - valueB;
}
});
比較は返す必要があります:
- a<bの場合は負
- a==bの場合は0
- a>bの場合は正。
文字列を数字のように比較したいので、それを実行しました。文字列を数値に変換して、数値を比較します。
ポルノを並べ替える:xxx-nnnn-nnnn
あなたの場合、あなたはそのフォーマット(abc-1234-5678)で文字列を収集していて、最初の番号に従ってそれらをソートする必要があります。それで、あなたがすでにあなたの文字列を集めたと仮定しましょう:
List<String> results
次に、任意の基準に従ってその文字列を並べ替える必要があります。いつものように、あなたはCollections.sort
特別なコンパレータを提供することを呼び出す必要があります。
そのコンパレータは、文字列全体ではなく、各文字列の最初の数値を比較する必要があります。例:abc-1234-5678
およびdef-3456-1988
。と比較する必要が1234
あり3456
ます。
その場合、コードは次のようになります。
Collections.sort(results, new Comparator<String>() {
public int compare(String str1, String str2) {
// obtain the number you'll use to compare
int value1 = getImportantNumber(str1);
int value2 = getImportantNumber(str2);
// return comparator (remember, the sign of the results says if it's <, =, >)
return value1 - value2;
}
// this method will extract the number, maybe you'll need a regex or substring, dunno
private int getImportantNumber(String str) {
// by example
Matcher m = PATTERN.matcher(str);
if (!m.find())
return -1; // or throw an exception, depends on you're requirements
String numberPart = m.group(...); // the number of the group catching the part you need
return Integer.parseInt(numberPart);
}
private static Pattern PATTERN = Pattern.compile("....");
});
どの正規表現
私は使用する必要があります:
(\w+)-(\d+)(-(\d+))*
それは見つけます:
letters-numbers[-numbers[-numbers...]]
しかし、2番目の場所で数字を見つけることがわからない場合は、次のことを行う必要があります。
String[] parts = str.split("-");
for (String part: parts)
if (this part has only numbers)
return Integer.parseInt(part);
// if there are no only number parts
throw new RuntimeException("Not valid number part found!");