[SCALA] 왜 빈 문자열에 "분할"비어 있지 않은 배열을 반환합니까?
SCALA왜 빈 문자열에 "분할"비어 있지 않은 배열을 반환합니까?
빈 문자열에 분할 크기 1의 배열을 반환합니다 :
scala> "".split(',')
res1: Array[String] = Array("")
이 빈 배열을 반환하도록 고려 :
scala> ",,,,".split(',')
res2: Array[String] = Array()
설명 해주십시오 :)
해결법
-
==============================
1.같은 이유로이 들어
같은 이유로이 들어
",test" split ','
과
",test," split ','
첫 경기는 첫 번째 요소로 반환되기 전에 크기 2. 모두의 배열을 반환합니다.
-
==============================
2.당신이 오렌지를 제로 시간을 분할하는 경우, 당신은 정확히 하나 개의 조각이 - 오렌지를.
당신이 오렌지를 제로 시간을 분할하는 경우, 당신은 정확히 하나 개의 조각이 - 오렌지를.
-
==============================
3.빈 문자열을 분할하면 첫 번째 요소로 빈 문자열을 반환합니다. 에 분리가 대상 문자열에서 찾을 수없는 경우, 당신은 비어있는 경우에도 크기가 원래 문자열을 들고 1의 배열을 얻을 것이다.
빈 문자열을 분할하면 첫 번째 요소로 빈 문자열을 반환합니다. 에 분리가 대상 문자열에서 찾을 수없는 경우, 당신은 비어있는 경우에도 크기가 원래 문자열을 들고 1의 배열을 얻을 것이다.
-
==============================
4.자바와 스칼라 분할 방법은 다음과 같이 두 단계로 운항합니다 :
자바와 스칼라 분할 방법은 다음과 같이 두 단계로 운항합니다 :
이것에 따르면, 결과가 "".split에는 ( ""), 오른쪽 때문에 두 번째 단계의 빈 배열되어야 하는가?
그것은해야한다. 불행하게도, 이것은 인위적으로 도입 코너 케이스입니다. 그리고 그 나쁜이지만,이 문서를 살펴보고 기억한다면 적어도 그것은 있으며, java.util.regex.Pattern에 설명되어 있습니다 :
그래서, 난 항상 == N 통과 조언 -1 두 번째 매개 변수로 특별히 당신이 달성하고자하는 것을 알고하지 않는 한, (이 위의 두 단계를 건너 뜁니다) / 당신은 빈 문자열 일이 그 프로그램이 것이 아니라고 확신 입력으로 얻을.
이미 프로젝트에 구아바를 사용하는 경우, 당신은 분배기 (문서) 클래스를 시도 할 수 있습니다. 그것은 매우 풍부한 API를 가지고 있으며, 매우 이해하기 쉽게 코드를 만든다.
Splitter.on(".").split(".a.b.c.") // "", "a", "b", "c", "" Splitter.on(",").omitEmptyStrings().split("a,,b,,c") // "a", "b", "c" Splitter.on(CharMatcher.anyOf(",.")).split("a,b.c") // "a", "b", "c" Splitter.onPattern("=>?").split("a=b=>c") // "a", "b", "c" Splitter.on(",").limit(2).split("a,b,c") // "a", "b,c"
-
==============================
5."A".split ( ",") -> "A" 따라서 "".split ( ",") -> ""
"A".split ( ",") -> "A" 따라서 "".split ( ",") -> ""
-
==============================
6.모든 프로그래밍 언어에서 나는 빈 문자열이 여전히 유효한 문자열 알고있다. 항상 요소가 빈 문자열 인 단일 요소 배열을 반환합니다 어떤 구분 기호를 사용하여 분할 하 고 그래서. 이 널이 있었다면 (비어 있지 않은) 문자열은 그 다른 문제가 될 것입니다.
모든 프로그래밍 언어에서 나는 빈 문자열이 여전히 유효한 문자열 알고있다. 항상 요소가 빈 문자열 인 단일 요소 배열을 반환합니다 어떤 구분 기호를 사용하여 분할 하 고 그래서. 이 널이 있었다면 (비어 있지 않은) 문자열은 그 다른 문제가 될 것입니다.
-
==============================
7.이 분할 동작은 좋든 나쁘 든 들어, 자바에서 상속됩니다 ... 스칼라는 문자열 원시의 정의를 무시하지 않습니다.
이 분할 동작은 좋든 나쁘 든 들어, 자바에서 상속됩니다 ... 스칼라는 문자열 원시의 정의를 무시하지 않습니다.
이 동작을 수정하기 위해 인수 제한을 사용할 수 있습니다, 참고 :
즉, 당신은 = 한계를 설정할 수 있습니다 -1 (모든?) 다른 언어의 동작을 얻을 :
@ ",a,,b,,".split(",") res1: Array[String] = Array("", "a", "", "b") @ ",a,,b,,".split(",", -1) // limit=-1 res2: Array[String] = Array("", "a", "", "b", "", "")
자바의 동작은 매우 혼란 있지만 잘 알려진 것으로 보인다 것 :
참고 : 분할 방법은 처음부터 자바 없었다 (는 1.0.2에없는)하지만 실제로는 적어도 1.4에서 (예를 들어, 2002 년경 JSR51 참조)가있다. 난 아직 조사하고 ...
무엇 불분명 것은 자바가 처음에 이것을 선택한 이유 (내 의혹은 원래 '가장자리 사건 "의 감독 / 버그라고이다),하지만 지금은 돌이킬 언어로 구운하고 유지되도록한다.
-
==============================
8.빈 문자열은 특별한 상태 분할하면서 문자열이 없습니다. 당신은 사용할 수 있습니다 :
빈 문자열은 특별한 상태 분할하면서 문자열이 없습니다. 당신은 사용할 수 있습니다 :
Some(str) .filter(_ != "") .map(_.split(",")) .getOrElse(Array())
from https://stackoverflow.com/questions/4964484/why-does-split-on-an-empty-string-return-a-non-empty-array by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 2.4 재생 : 양식 : 매개 변수 메시지에 대한 암시 적 가치를 찾을 수 없습니다 : play.api.i18n.Messages를 (0) | 2019.11.06 |
---|---|
[SCALA] 문자열에 필터 스파크 DataFrame는 포함 (0) | 2019.11.06 |
[SCALA] 스칼라 / 스파크 : 마지막 관찰과 앞으로 채우기 (0) | 2019.11.06 |
[SCALA] 스칼라에서 선형화 순서 (0) | 2019.11.06 |
[SCALA] 플레이 2 JSON 형식으로 누락 된 속성에 대한 기본값 (0) | 2019.11.06 |