假設我有一個整數的一些排序名單,我想將它們轉換爲各自的正則表達式的數字範圍,像這樣:生成正則表達式的數字範圍
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] => [0-9]
[0, 1, 2, 3, 4, 6, 7, 8, 9] => [0-46-9]
[0, 1, 3, 4, 5, 8, 9] => [013-589]
[0, 2, 4, 6, 8] => [02468]
我並不想雷傑x匹配任何東西。我試圖從產生一個正則表達式範圍一組數字。
我真的只是想看看是否已經有一些事實上的算法來做這樣的事情。
編輯:基於@ Jerry_Coffin的答案,一個基於Java的算法:
List<Integer> digits = Arrays.asList(0, 1, 3, 4, 5, 8, 9);
StringBuilder digitRange = new StringBuilder().append('[');
int consecutive = 0;
for (int i = 0; i < digits.size(); i++) {
if (i == digits.size() - 1 || digits.get(i) + 1 != digits.get(i + 1)) {
if (consecutive > 1) {
digitRange.append('-');
}
digitRange.append(digits.get(i));
consecutive = 0;
} else {
if (consecutive == 0) {
digitRange.append(digits.get(i));
}
consecutive++;
}
}
digitRange.append(']');
System.out.println(digitRange.toString());
輸出:[013-589]
隨意找到改進或問題。
而這些列表已經排序? –
是的,他們被排序。將更新問題以明確說明。 –