StringTokenizer라는 아이디어는 Enumerable이기 때문에 좋아합니다.
그러나 그것은 또한 더 이상 사용되지 않으며, 지루한 String []을 리턴하는 String.split으로 대체됩니다 (구분자를 포함하지 않습니다).
그래서 Iterable 인 StringTokenizerEx를 구현했으며 문자열을 분할하는 데 실제 정규 표현식이 필요합니다.
진정한 정규 표현식은 구분 기호를 형성하기 위해 반복되는 '문자 시퀀스'가 아님을 의미합니다
.
[o], '', [o], '', [o]
그러나 정규 표현식 o +는 "aooob"를 분할 할 때 예상 결과를 반환합니다
[], 'a', [ooo], 'b', []
이 StringTokenizerEx를 사용하려면
final StringTokenizerEx aStringTokenizerEx = new StringTokenizerEx("boo:and:foo", "o+");
final String firstDelimiter = aStringTokenizerEx.getDelimiter();
for(String aString: aStringTokenizerEx )
{
// uses the split String detected and memorized in 'aString'
final nextDelimiter = aStringTokenizerEx.getDelimiter();
}
이 클래스의 코드는 DZone Snippets 에서 사용할 수 있습니다 .
코드 챌린지 응답 (테스트 케이스가 포함 된 하나의 자체 포함 클래스)에 대해 평소와 같이 복사하여 ( 'src / test'디렉토리에) 붙여 넣기 를 실행하십시오 . main () 메소드는 다양한 사용법을 보여줍니다.
참고 : (2009 년 말 편집)
Final Thoughts : Java Puzzler : Splitting Hairs 기사 는 기괴한 동작을 설명하는 훌륭한 작업을 수행합니다 String.split().
조쉬 블로흐 (Josh Bloch)도이 기사에 대한 답변으로 다음과 같이 논평했다.
예, 이것은 고통입니다. FWIW는 Perl과의 호환성이라는 아주 좋은 이유로 이루어졌습니다.
그것을 한 사람은 Mike "madbot"McCloskey이며, 현재 Google에서 우리와 함께 일합니다. Mike는 Java의 정규 표현식이 30K Perl 정규 표현식 테스트를 거의 모두 통과하고 더 빠르게 실행되도록했습니다.
Google 공통 라이브러리 Guava 에는 다음과 같은 스플리터도 포함되어 있습니다.
- 사용하기 더 간단
- Google이 관리하며 귀하가 아닌
따라서 체크 아웃 할 가치가 있습니다. 자신의에서 초기 거친 문서 (PDF) :
JDK에는 다음이 있습니다.
String[] pieces = "foo.bar".split("\\.");
정확히 무엇을 원한다면 이것을 사용하는 것이 좋습니다 :-정규 표현식-배열 결과-빈 조각을 처리하는 방법
미니 퍼즐 : ", a ,, b,". split ( ",") 반환 ...
(a) "", "a", "", "b", ""
(b) null, "a", null, "b", null
(c) "a", null, "b"
(d) "a", "b"
(e) None of the above
답 : (e) 위의 어느 것도 아닙니다.
",a,,b,".split(",")
returns
"", "a", "", "b"
후행 빈 용기 만 건너 뜁니다! (누구를 피하는 해결 방법을 알고있는 사람은 누구입니까?)
어쨌든 Splitter는 더 유연합니다. 기본 동작은 단순합니다.
Splitter.on(',').split(" foo, ,bar, quux,")
--> [" foo", " ", "bar", " quux", ""]
추가 기능을 원하면 요청하십시오!
Splitter.on(',')
.trimResults()
.omitEmptyStrings()
.split(" foo, ,bar, quux,")
--> ["foo", "bar", "quux"]
구성 방법의 순서는 중요하지 않습니다. 분할하는 동안 빈을 확인하기 전에 트리밍이 발생합니다.