2017-04-15 1 views
1

Swift 3을 사용하고 0과 1을 포함하는 긴 문자열이 있습니다. Ex. "1111001111111111001111111111000111000000000111000111111111100000000111100111100111111111100000000011100011111111110011110011110000000000000000000"Swift 3의 문자열을 특정 문자로 분리하는 방법

이 문자열을 두 개의 배열로 나눠서 하나의 0과 0이 몇 개씩 반복되는지 확인하려고합니다.

["1111", "", "1111111111", "", "1111111111", "", "", "111", "", "", "", "", "", "", "", "", "111", "", "", "1111111111", "", "", "", "", "", "", "", "1111", "", "1111", "", "1111111111", "", "", "", "", "", "", "", "", "111", "", "", "1111111111", "", "1111", "", "1111", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""]

["", "", "", "", "00", "", "", "", "", "", "", "", "", "", "00", "", "", "", "", "", "", "", "", "", "000", "", "", "000000000", "", "", "000", "", "", "", "", "", "", "", "", "", "00000000", "", "", "", "00", "", "", "", "00", "", "", "", "", "", "", "", "", "", "000000000", "", "", "000", "", "", "", "", "", "", "", "", "", "00", "", "", "", "00", "", "", "", "0000000000000000000"]

그리고 우리는 왜 우리가 할 수없는 단지 수익을 이해하지 않습니다

나는 방법 우리가 우리의 예를 들어 문자열을 얻을 let oneArray = binString.components(separatedBy: "0")let zeroArray = binString.components(separatedBy: "1") 반환 된 배열 전화

입니다 배열은 0과 1 만 포함하고 배열 요소는 빈 문자열이 아닙니다. 다른 사람들이 전에 이런 질문을 한 것 같지 않습니다. 문자에서 문자열을 구분하는 데 사용되는 일반적인 방법 인 것처럼 보이기 때문에 혼란 스럽습니다.

이 문자열을 우리가 원하는 방식으로 분리하는 방법을 알고 싶습니다. 여기 이상한 상황 같아요

답변

1

구분 기호 문자열이 나타날 때마다 원래 문자열을 새 문자열로 분할하므로 연속 된 결과는 빈 문자열이됩니다.

원하는대로 가깝습니다. 그냥 원치 않는 빈 문자열을 제거하기 위해 각 라인의 끝에 filter { !$0.isEmpty } 문을 추가 :

let binString = "1111001111111111001111111111000111000000000111000111111111100000000111100111100111111111100000000011100011111111110011110011110000000000000000000" 

let oneArray = binString.components(separatedBy: "0").filter { !$0.isEmpty } 
let zeroArray = binString.components(separatedBy: "1").filter { !$0.isEmpty } 

print(oneArray) 
print(zeroArray) 

출력 :

["1111", "1111111111", "1111111111", "111", "111", "1111111111", "1111", "1111", "1111111111", "111", "1111111111", "1111", "1111"] 
["00", "00", "000", "000000000", "000", "00000000", "00", "00", "000000000", "000", "00", "00", "0000000000000000000"] 
+1

감사 @LeoDabus. 네가 옳아. 빈 문자열을 검사 할 때는'isEmpty'를 사용하는 것이 바람직합니다. 나는 나의 대답을 업데이트했다. – vacawama

1

구성 요소 기능은 문자를 구분 기호로 사용하므로 결과 배열에 문자를 포함하지 않으며 연속 된 구분 기호를 빈 문자열 요소로 처리합니다.

let binary = "1111001111111111001111111111000111000000000111000111111111100000000111100111100111111111100000000011100011111111110011110011110000000000000000000" 

let series = binary.replacingOccurrences(of: "10", with: "1,0") 
        .replacingOccurrences(of: "01", with: "0,1") 
        .components(separatedBy:",") 

1/0 시리즈의 모든 틈 사이에 쉼표를 삽입하여 당신이 그들을 필요로하는 곳에, 당신은 정확히 구분 기호를 얻을 :

은 당신이 할 수있는 것은 이것이다.

시리즈 배열은 연속적인 1과 연속적인 0을 교대로 포함합니다. 모든 1과 모든 0을 함께 그룹화하려는 경우 정렬 할 수 있습니다.

관련 문제