2017-04-15 11 views
1

私はSwift 3を使用していて、0と1を含む長い文字列を持っています。 Ex。 "1111001111111111001111111111000111000000000111000111111111100000000111100111100111111111100000000011100011111111110011110011110000000000000000000"Swift 3の文字列を特定の文字で区切る方法

私は、この文字列を2つの配列に分割して、1と0が何回繰り返しているかを調べようとしています。

私は方法let oneArray = binString.components(separatedBy: "0")let zeroArray = binString.components(separatedBy: "1")を呼び出すと、我々は我々の例の文字列を取得返される配列は次のとおりです。

["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"]

そして、我々だけ返すことができない理由を私たちは理解していません配列要素として空の文字列ではなく、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

コンポーネントの機能は文字を区切り文字として使用するため、結果の配列には含まれず、連続する区切り文字を空の文字列要素として扱います。あなたは何ができるか

はこれです:1/0シリーズのすべての休憩の間にコンマを挿入することにより

let binary = "1111001111111111001111111111000111000000000111000111111111100000000111100111100111111111100000000011100011111111110011110011110000000000000000000" 

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

、あなたがそれらを必要とする正確に区切り文字を取得します。

シリーズ・アレイには連続する1と連続する0が交互に含まれます。すべての1の系列とすべての0をグループ化したい場合は、ソートすることができます。

関連する問題