Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
65
Task/Range-expansion/Java/range-expansion.java
Normal file
65
Task/Range-expansion/Java/range-expansion.java
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
import java.util.*;
|
||||
|
||||
class RangeExpander implements Iterator<Integer>, Iterable<Integer> {
|
||||
|
||||
private static final Pattern TOKEN_PATTERN = Pattern.compile("([+-]?\\d+)-([+-]?\\d+)");
|
||||
|
||||
private final Iterator<String> tokensIterator;
|
||||
|
||||
private boolean inRange;
|
||||
private int upperRangeEndpoint;
|
||||
private int nextRangeValue;
|
||||
|
||||
public RangeExpander(String range) {
|
||||
String[] tokens = range.split("\\s*,\\s*");
|
||||
this.tokensIterator = Arrays.asList(tokens).iterator();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasNext() {
|
||||
return hasNextRangeValue() || this.tokensIterator.hasNext();
|
||||
}
|
||||
|
||||
private boolean hasNextRangeValue() {
|
||||
return this.inRange && this.nextRangeValue <= this.upperRangeEndpoint;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer next() {
|
||||
if (!hasNext()) {
|
||||
throw new NoSuchElementException();
|
||||
}
|
||||
|
||||
if (hasNextRangeValue()) {
|
||||
return this.nextRangeValue++;
|
||||
}
|
||||
|
||||
String token = this.tokensIterator.next();
|
||||
|
||||
Matcher matcher = TOKEN_PATTERN.matcher(token);
|
||||
if (matcher.find()) {
|
||||
this.inRange = true;
|
||||
this.upperRangeEndpoint = Integer.valueOf(matcher.group(2));
|
||||
this.nextRangeValue = Integer.valueOf(matcher.group(1));
|
||||
return this.nextRangeValue++;
|
||||
}
|
||||
|
||||
this.inRange = false;
|
||||
return Integer.valueOf(token);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Iterator<Integer> iterator() {
|
||||
return this;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class RangeExpanderTest {
|
||||
public static void main(String[] args) {
|
||||
RangeExpander re = new RangeExpander("-6,-3--1,3-5,7-11,14,15,17-20");
|
||||
for (int i : re) {
|
||||
System.out.print(i + " ");
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue