자바 8
구조
난독에!
import java.util.ArrayList;
import java.util.List;
import java.util.Spliterator;
import java.util.function.Consumer;
public class Test {
public static void main(String[] args) {
char[] input = { 'a', 'r', '|','t', 'i', '|','s', 't' };
List<Spliterator<Character>> spliterators= new DelimiterSpliterator(input, '|').tryAllSplits();
List<char[]> splits= spliterators.stream().collect(ArrayList<char[]>::new, (result, element) -> result.add(((DelimiterSpliterator) element).toCharArray()), ArrayList<char[]>::addAll);
for (char[] split : splits) {
System.out.println(split);
}
}
}
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Spliterator;
public class DelimiterSpliterator implements Spliterator<Character> {
private final char[] array;
private final char delimiter;
private int start;
private final int end;
public DelimiterSpliterator(char[] array, char delimiter) {
this(array, delimiter, 0, array.length);
}
private DelimiterSpliterator(char[] array, char delimiter, int start, int end) {
this.array = array;
this.delimiter = delimiter;
this.start = start;
this.end = end;
}
public char[] toCharArray() {
return Arrays.copyOfRange(array, start, end);
}
public List<Spliterator<Character>> tryAllSplits() {
// Collects all splits.
List<Spliterator<Character>> result = new ArrayList<>();
Spliterator<Character> s = trySplit();
while (s != null) {
result.add(s);
s = trySplit();
}
result.add(this);
return result;
}
@Override
public int characteristics() {
return IMMUTABLE | ORDERED | SIZED | SUBSIZED;
}
@Override
public long estimateSize() {
return end-start;
}
@Override
public boolean tryAdvance(Consumer<? super Character> action) {
if (start < end) {
action.accept(array[start++]);
return true;
} else {
return false;
}
}
@Override
public Spliterator<Character> trySplit() {
// Returns a new Spliterator that cannot be split further, from left to right.
for (int i = start; i < end - 1; i++) {
if (array[i] == delimiter) {
final int origStart = start;
start = i + 1;
return new DelimiterSpliterator(array, delimiter, origStart, i);
}
}
return null;
}
}
참고 : 관련 가능한 성능 문제 자동 권투 언급 in the javadoc로/언 박싱.
입력이 크고 특히 결과 순서가 중요하지 않은 경우 스트림이 양호합니다 (스트림이 병렬이거나 trySplit이 덜 결정적 일 수 있음)
출처
2016-08-06 05:16:44
alt
그래서 ...배열을 읽는 법을 모르십니까? 배열을 만드는 방법? 문자를 비교하는 방법? 문제가 정확히 무엇입니까? – shmosel
결과 배열은 모두'result' {number}로 명명 될까요? 예 :'result4','result5' 등 – brijs