본문으로 건너뛰기
토파즈문서
6.05.21

문서 검색

명세 6.0

방향키로 결과를 고르고 Enter를 눌러 여세요.

API 이름, 진단 번호, 규칙 또는 프로젝트 주제를 입력하세요.

    다운로드 →

    라이브러리 · 문자열

    string.split

    Divide text at every occurrence of a nonempty separator.

    split(sep: string) -> Array<string>
    수신자
    string
    최소 인자 수
    1
    최대 인자 수
    1

    Declaration and parameters

    사용 조건

    기본 포함 · 예

    These types are provided by the language. No module import is required.

    The declarations below describe the standard operations on built-in values.

    수신자

    string

    매개변수 제약

    string.codePointAt(i: int) returns Option<int>. Index i counts Unicode scalars in the order of scalars(). It never counts UTF-8 bytes.

    An index from zero to one less than the scalar count returns Some with the Unicode value of that scalar. A negative index or an index at or past the scalar count returns None(). The call does not fault for an index outside the text.

    string.byteLength() returns the number of bytes in the UTF-8 encoding of the stored scalars. Empty text returns 0. The count does not normalize text.

    string.split(sep: string) returns Array<string>. It scans the text from the start and divides it at each occurrence of sep that does not overlap an earlier occurrence.

    The pieces keep source order. Adjacent separators and separators at either end produce empty pieces. Text without sep returns one piece that holds the whole text. Empty text returns one empty piece. Joining the pieces with sep reproduces the text.

    An empty separator faults at run time with TPZ5001 at the call. Divide text into Unicode scalars with scalars() or into grapheme clusters with graphemes().

    결과

    The declared result type is Array<string>.

    효과

    실패

    Result and effects

    Return the pieces between separator occurrences in source order, including empty pieces. An empty separator faults at run time.

    Related entries

    Strings →

    Read code points, byte counts and separated pieces

    Read code points, byte counts and separated pieces

    string.codePointAt(i: int) returns Option<int>. Index i counts Unicode scalars in the order of scalars(). It never counts UTF-8 bytes.

    An index from zero to one less than the scalar count returns Some with the Unicode value of that scalar. A negative index or an index at or past the scalar count returns None(). The call does not fault for an index outside the text.

    string.byteLength() returns the number of bytes in the UTF-8 encoding of the stored scalars. Empty text returns 0. The count does not normalize text.

    string.split(sep: string) returns Array<string>. It scans the text from the start and divides it at each occurrence of sep that does not overlap an earlier occurrence.

    The pieces keep source order. Adjacent separators and separators at either end produce empty pieces. Text without sep returns one piece that holds the whole text. Empty text returns one empty piece. Joining the pieces with sep reproduces the text.

    An empty separator faults at run time with TPZ5001 at the call. Divide text into Unicode scalars with scalars() or into grapheme clusters with graphemes().

    이유

    Text algorithms name their unit. codePointAt uses the scalar unit of scalars() and reports absence as a value, so a classifier can read the first scalar of any text without a separate length test. byteLength gives the UTF-8 size that wire formats and byte limits use. split divides text at literal separator text, while Regex.split divides it at a pattern. An empty separator marks no position, so the call faults and the program chooses a text unit explicitly.

    Read scalar values by scalar index

    main.tpzRead scalar values by scalar index플레이그라운드 열기 →
    1. import std.io
    2. function show(value: Option<int>) -> string {
    3. match (value) {
    4. case Some(point) => "{point}"
    5. case None() => "none"
    6. }
    7. }
    8. let text = "a가😀"
    9. for index in ([-1, 0, 1, 2, 3]) {
    10. io.writeLine("{index}: {show(text.codePointAt(index))}")
    11. }
    기대 출력종료 코드 0
    -1: none
    0: 97
    1: 44032
    2: 128512
    3: none
    
    $ topaz run main.tpz · 대상 제품 5.21.3
    기대 결과

    기대 결과

    실행을 마칩니다. 종료 코드 0.

    기대 표준 출력
    1. -1: none
    2. 0: 97
    3. 1: 44032
    4. 2: 128512
    5. 3: none

    Compare scalar counts with UTF-8 byte counts

    main.tpzCompare scalar counts with UTF-8 byte counts플레이그라운드 열기 →
    1. import std.io
    2. for text in (["", "a", "가", "😀", "a가😀"]) {
    3. io.writeLine("{text.scalars().length} {text.byteLength()}")
    4. }
    기대 출력종료 코드 0
    0 0
    1 1
    1 3
    1 4
    3 8
    
    $ topaz run main.tpz · 대상 제품 5.21.3
    기대 결과

    기대 결과

    실행을 마칩니다. 종료 코드 0.

    기대 표준 출력
    1. 0 0
    2. 1 1
    3. 1 3
    4. 1 4
    5. 3 8

    Keep empty pieces between separators

    main.tpzKeep empty pieces between separators플레이그라운드 열기 →
    1. import std.io
    2. function show(pieces: Array<string>) -> string {
    3. "{pieces.length} [{pieces.join("|")}]"
    4. }
    5. io.writeLine(show("a,b,,c,".split(",")))
    6. io.writeLine(show("a::b".split("::")))
    7. io.writeLine(show("aaa".split("aa")))
    8. io.writeLine(show("plain".split(",")))
    9. io.writeLine(show("".split(",")))
    10. let text = ",x,"
    11. io.writeLine("{text.split(",").join(",") == text}")
    기대 출력종료 코드 0
    5 [a|b||c|]
    2 [a|b]
    2 [|a]
    1 [plain]
    1 []
    true
    
    $ topaz run main.tpz · 대상 제품 5.21.3
    기대 결과

    기대 결과

    실행을 마칩니다. 종료 코드 0.

    기대 표준 출력
    1. 5 [a|b||c|]
    2. 2 [a|b]
    3. 2 [|a]
    4. 1 [plain]
    5. 1 []
    6. true

    Fault on an empty separator

    main.tpzFault on an empty separator플레이그라운드 열기 →
    1. import std.io
    2. let separator = ""
    3. let _ = "abc".split(separator)
    4. io.writeLine("after")
    기대 출력0이 아닌 종료 코드
    표준 출력 없음.
    $ topaz run main.tpz · 대상 제품 5.21.3
    기대 결과

    기대 결과

    거절 단계 run. 종료 코드가 0이 아닙니다.

    • TPZ5001 →

      stdlib-string-split-empty-separator at main.tpz:4:9

    Diagnostics

    Runtime value guard →