2014-11-03 5 views
1

나는 빈리스트를 기다리고 있었다 그러나 나는 가지고 :Groovy : 빈 문자열을 공백으로 split하는 이유는 빈 문자열 하나를 반환하는 이유는 무엇입니까?

assert 1 == "".split(/\s+/).size()

assert 0 == "".split().size()

+0

나는 버그라고 생각합니다. 팀원들에게 그들의 의견을 묻습니다. –

+0

나는 자바가 같은 일을한다고 생각한다. –

+0

@JeffScottBrown 방금 표준 동작이라고 알았습니다. checkout http://stackoverflow.com/questions/16645083/when-splitting-an-empty-string-in-python-why-does-split-return-an-empty-list –

답변

1

방금 ​​Java와 Python의 String.split()이이 패턴을 따릅니다. Checkout http://docs.python.org/2/library/stdtypes.html#str.split.

SO 질문 When splitting an empty string in Python, why does split() return an empty list while split('\n') returns ['']?에는 답변도 읽어야합니다.

최고

는 대답은 설명 투표 :

str.split() 방법은 두 가지 알고리즘을 가지고있다. 인수가 주어지지 않으면 반복되는 공백 문자의 행에서 분할됩니다. 그러나 인수가 주어지면 인수가 반복 실행없이 단일 분리 문자로 취급됩니다.

빈 문자열을 분할하는 경우 공백이 먹히고 결과 목록에 넣을 값이 없으므로 첫 번째 모드 (인수 없음)는 빈 목록을 반환합니다.

대조적으로 두 번째 모드 (인수는 \n)는 첫 번째 빈 필드를 생성합니다. '\n'.split('\n')이라고 쓰면 2 개의 필드를 얻을 수 있습니다 (하나의 분할은 두 개의 반쪽을 제공함).

0

은 아마 당신은 대신 tokenize()를 사용해야합니까?

assert "".tokenize().size() == 0 
assert "foo bar".tokenize() == ['foo', 'bar']