mirror of
https://github.com/angryip/ipscan.git
synced 2025-10-26 11:18:17 +00:00
NumericListValue now displays short ranges of 2 with comma, only starting from 3 range is displayed with dash
git-svn-id: https://ipscan.svn.sourceforge.net/svnroot/ipscan/trunk@172 375186e5-ef17-0410-b0b6-91563547dcda
This commit is contained in:
parent
d9d944f7a1
commit
789bed2faa
@ -14,7 +14,7 @@ import java.util.Collection;
|
||||
*
|
||||
* TODO: add parsing functionality here.
|
||||
*
|
||||
* @author Anton Keks Keks
|
||||
* @author Anton Keks
|
||||
*/
|
||||
public class NumericListValue {
|
||||
|
||||
@ -29,7 +29,7 @@ public class NumericListValue {
|
||||
* @param displayAsRanges whether toString() outputs all number or their ranges
|
||||
*/
|
||||
public NumericListValue(Collection<Integer> numbers, boolean displayAsRanges) {
|
||||
// copy numbers to an array (unfortunately toArray() cannot be used because int[] is not IS-A Object[])
|
||||
// copy numbers to an array (unfortunately toArray() cannot be used because int[] is not an Object[])
|
||||
this.numbers = new int[numbers.size()];
|
||||
int c = 0;
|
||||
for (Number n : numbers) {
|
||||
@ -45,33 +45,38 @@ public class NumericListValue {
|
||||
public String toString() {
|
||||
StringBuffer sb = new StringBuffer();
|
||||
|
||||
int prevPort = Integer.MAX_VALUE;
|
||||
int prevNumber = Integer.MAX_VALUE;
|
||||
int rangeStartNumber = 0;
|
||||
boolean isRange = false;
|
||||
int i = 0;
|
||||
|
||||
if (numbers.length > 0) {
|
||||
prevPort = numbers[0];
|
||||
sb.append(prevPort);
|
||||
prevNumber = numbers[0];
|
||||
sb.append(prevNumber);
|
||||
}
|
||||
|
||||
while (++i < numbers.length) {
|
||||
int port = numbers[i];
|
||||
int curNumber = numbers[i];
|
||||
|
||||
if (displayAsRanges && prevPort + 1 == port) {
|
||||
isRange = true;
|
||||
if (displayAsRanges && prevNumber + 1 == curNumber) {
|
||||
if (!isRange) {
|
||||
isRange = true;
|
||||
rangeStartNumber = prevNumber;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (isRange) {
|
||||
sb.append('-').append(prevPort);
|
||||
// display short ranges with comma, long ranges with dash
|
||||
sb.append(rangeStartNumber+1 == prevNumber ? ',' : '-').append(prevNumber);
|
||||
isRange = false;
|
||||
}
|
||||
sb.append(',').append(port);
|
||||
sb.append(',').append(curNumber);
|
||||
}
|
||||
prevPort = port;
|
||||
prevNumber = curNumber;
|
||||
}
|
||||
|
||||
if (isRange) {
|
||||
sb.append('-').append(prevPort);
|
||||
sb.append(rangeStartNumber+1 == prevNumber ? ',' : '-').append(prevNumber);
|
||||
}
|
||||
|
||||
return sb.toString();
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
/**
|
||||
*
|
||||
* This file is a part of Angry IP Scanner source code,
|
||||
* see http://www.azib.net/ for more information.
|
||||
* Licensed under GPLv2.
|
||||
*/
|
||||
package net.azib.ipscan.core.values;
|
||||
|
||||
@ -11,9 +13,8 @@ import java.util.TreeSet;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
|
||||
/**
|
||||
* @author Anton Keks Keks
|
||||
* @author Anton Keks
|
||||
*/
|
||||
public class NumericListValueTest {
|
||||
|
||||
@ -21,10 +22,12 @@ public class NumericListValueTest {
|
||||
public void testToString() {
|
||||
assertEquals("", new NumericListValue(Collections.<Integer>emptyList(), true).toString());
|
||||
assertEquals("1", new NumericListValue(Arrays.asList(1), true).toString());
|
||||
assertEquals("1,2", new NumericListValue(Arrays.asList(1, 2), true).toString());
|
||||
assertEquals("1-3", new NumericListValue(Arrays.asList(1, 2, 3), true).toString());
|
||||
assertEquals("1-3", new NumericListValue(new TreeSet<Integer>(Arrays.asList(2, 3, 1)), true).toString());
|
||||
assertEquals("1,2,3", new NumericListValue(Arrays.asList(1, 2, 3), false).toString());
|
||||
assertEquals("1,5-6,15", new NumericListValue(Arrays.asList(1, 5, 6, 15), true).toString());
|
||||
assertEquals("1,5,6,15", new NumericListValue(Arrays.asList(1, 5, 6, 15), true).toString());
|
||||
assertEquals("1,5-8,15", new NumericListValue(Arrays.asList(1, 5, 6, 7, 8, 15), true).toString());
|
||||
assertEquals("103,85,89,1", new NumericListValue(Arrays.asList(103, 85, 89, 1), true).toString());
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user