QStringTokenizer Class

template <typename Haystack, typename Needle> class QStringTokenizer

QStringTokenizer 클래스는 주어진 구분 기호를 따라 문자열을 토큰으로 분할합니다. 더 보기...

Header: #include <QStringTokenizer>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
이후: Qt 6.0
상속합니다: QtPrivate::Tok::헤이 스택 피닝 (비공개), QtPrivate::Tok::니들 피닝 (비공개), 그리고

참고: 이 클래스의 모든 함수는 재진입입니다.

공용 유형

공용 함수

QStringTokenizer(Haystack haystack, Needle needle, Qt::CaseSensitivity cs, Qt::SplitBehavior sb = Qt::KeepEmptyParts)
QStringTokenizer(Haystack haystack, Needle needle, Qt::SplitBehavior sb = Qt::KeepEmptyParts, Qt::CaseSensitivity cs = Qt::CaseSensitive)
QStringTokenizer<Haystack, Needle>::iterator begin() const
QStringTokenizer<Haystack, Needle>::iterator cbegin() const
QStringTokenizer<Haystack, Needle>::sentinel cend() const
QStringTokenizer<Haystack, Needle>::sentinel end() const
LContainer toContainer(LContainer &&c = {}) const &
RContainer toContainer(RContainer &&c = {}) const &&
(since 6.0) auto qTokenize(Haystack &&haystack, Needle &&needle, Flags... flags)

상세 설명

문자열을 지정된 구분 기호가 발생할 때마다 하위 문자열로 분할하여 해당 문자열의 (느리게 구성된) 리스트를 반환합니다. 구분 기호가 문자열의 어느 곳과도 일치하지 않으면 이 문자열을 포함하는 단일 엘리먼트 리스트를 생성합니다. 구분 기호가 비어 있으면, QStringTokenizer는 빈 문자열을 생성한 다음 각 문자열의 문자에 이어 또 다른 빈 문자열을 생성합니다. Qt::SplitBehaviorQt::CaseSensitivity 두 열거형은 출력을 추가로 제어합니다.

QStringTokenizer는 QStringView::tokenize()를 구동하지만 직접 사용할 수도 있습니다:

for (auto it : QStringTokenizer{string, separator})
    use(*it);

참고: QStringTokenizer의 템플릿 인수는 절대로 명시적으로 이름을 지정해서는 안 됩니다. 템플릿 인수 없이 QStringTokenizer{string, separator} 를 작성하거나 qTokenize() 함수 또는 QStringView::split() 또는 QLatin1StringView::split() 멤버 함수를 사용하고 반환값을 auto 변수에만 저장할 수 있습니다:

auto result = string.split(sep);

이는 QStringTokenizer의 템플릿 인수가 구성되는 특정 문자열 및 구분 기호 유형에 매우 미묘한 종속성을 가지며, 일반적으로 전달된 실제 유형과 일치하지 않기 때문입니다.

지연 시퀀스

QStringTokenizer는 소위 지연 시퀀스, 즉 사용자가 요청할 때만 각 다음 요소를 계산하는 방식으로 작동합니다. 지연 시퀀스는 O(1) 메모리만 필요하다는 장점이 있습니다. 하지만 적어도 QStringTokenizer의 경우 무작위 액세스가 아닌 순방향 반복만 허용한다는 단점이 있습니다.

의도된 사용 사례는 범위 지정 루프에 연결하기만 하면 됩니다:

for (auto it : QStringTokenizer{string, separator})
    use(*it);

또는 C++20 범위 알고리즘에 연결하는 것입니다:

std::ranges::for_each(QStringTokenizer{string, separator},
                      [] (auto token) { use(token); });

센티널 종료

기존 STL 알고리즘은 이터레이터/이터레이터 쌍을 필요로 하는 반면, QStringTokenizer는 센티널을 사용하기 때문에 QStringTokenizer 이터레이터는 기존 STL 알고리즘과 함께 사용할 수 없습니다. 즉, 다른 유형인 QStringTokenizer::sentinel 을 사용하여 범위의 끝을 표시합니다. 센티널은 빈 타입이므로 성능이 향상됩니다. 센티널은 C++17(범위용)과 C++20(새 범위 라이브러리를 사용하는 알고리즘용)에서 지원됩니다.

임시

QStringTokenizer는 매달린 참조를 피하기 위해 매우 신중하게 설계되었습니다. 임시 문자열(rvalue)로 토큰화기를 구성하면 해당 인수가 내부에 저장되므로 토큰화되기 전에 참조된 데이터가 삭제되지 않습니다:

auto tok = QStringTokenizer{widget.text(), u','};
// return value of `widget.text()` is destroyed, but content was moved into `tok`
for (auto e : tok)
   use(e);

명명된 객체(lvalues)를 전달하면 QStringTokenizer는 복사본을 저장하지 않습니다. 명명된 객체의 데이터는 토큰화 프로그램이 작동하는 시간보다 더 오래 보관할 책임이 있습니다:

auto text = widget.text();
auto tok = QStringTokenizer{text, u','};
text.clear();      // destroy content of `text`
for (auto e : tok) // ERROR: `tok` references deleted data!
    use(e);

QStringView::split(), QString::split() 및 QRegularExpression참조하십시오 .

멤버 유형 문서

[alias] QStringTokenizer::const_iterator

이 typedef는 QStringTokenizer 에 대한 STL 스타일 const 이터레이터를 제공합니다.

iterator도 참조하십시오 .

[alias] QStringTokenizer::const_pointer

value_type * 의 별칭 .

[alias] QStringTokenizer::const_reference

value_type & 의 별칭 .

[alias] QStringTokenizer::difference_type

qsizetype의 별칭입니다.

[alias] QStringTokenizer::iterator

이 typedef는 QStringTokenizer 에 대한 STL 스타일의 const 이터레이터를 제공합니다.

QStringTokenizer 는 변경 가능한 이터레이터를 지원하지 않으므로 const_iterator 와 동일합니다.

const_iterator참조하십시오 .

[alias] QStringTokenizer::pointer

의 별칭 value_type *.

QStringTokenizer 은 변경 가능한 반복자를 지원하지 않으므로 const_pointer 과 동일합니다.

[alias] QStringTokenizer::reference

value_type & 의 별칭입니다.

QStringTokenizer 은 변경 가능한 참조를 지원하지 않으므로 const_reference 과 동일합니다.

[alias] QStringTokenizer::sentinel

이 typedef는 QStringTokenizer::iteratorQStringTokenizer::const_iterator 에 대한 STL 스타일 센티널을 제공합니다.

const_iterator참조하세요 .

[alias] QStringTokenizer::size_type

qsizetype의 별칭입니다.

[alias] QStringTokenizer::value_type

토큰화 도구의 Haystack 템플릿 인수에 따라 const QStringView 또는 const QLatin1StringView 의 별칭입니다.

멤버 함수 문서

[explicit constexpr noexcept(...)] QStringTokenizer::QStringTokenizer(Haystack haystack, Needle needle, Qt::CaseSensitivity cs, Qt::SplitBehavior sb = Qt::KeepEmptyParts)

[explicit constexpr noexcept(...)] QStringTokenizer::QStringTokenizer(Haystack haystack, Needle needle, Qt::SplitBehavior sb = Qt::KeepEmptyParts, Qt::CaseSensitivity cs = Qt::CaseSensitive)

haystack 문자열을 needle 이 발생할 때마다 하위 문자열로 분할하고 해당 문자열이 발견될 때마다 반복을 허용하는 문자열 토큰화기를 구축합니다. needlehaystack 의 어느 곳과도 일치하지 않으면 haystack 를 포함하는 단일 요소가 생성됩니다.

cs needle 대소문자를 구분하여 일치시킬지 대소문자를 구분하지 않고 일치시킬지 지정합니다.

sbQt::SkipEmptyParts 인 경우 빈 항목은 결과에 표시되지 않습니다. 기본적으로 빈 항목은 포함됩니다.

참고: (1)은 std::is_nothrow_copy_constructible<QStringTokenizer>::valuetrue 일 때를 제외하고는 제외됩니다.

참고: (2)는 std::is_nothrow_copy_constructible<QStringTokenizer>::valuetrue 일 때를 제외하고는 없습니다.

QStringView::split(), QString::split(), Qt::CaseSensitivity, 및 Qt::SplitBehavior도 참조하세요 .

[noexcept] QStringTokenizer<Haystack, Needle>::iterator QStringTokenizer::begin() const

[noexcept] QStringTokenizer<Haystack, Needle>::iterator QStringTokenizer::cbegin() const

목록의 첫 번째 토큰을 가리키는 상수 STL 스타일 이터레이터를 반환합니다.

end() 및 cend()도 참조하세요 .

[constexpr noexcept] QStringTokenizer<Haystack, Needle>::sentinel QStringTokenizer::cend() const

end()와 동일합니다.

cbegin() 및 end()도 참조하세요 .

[constexpr noexcept] QStringTokenizer<Haystack, Needle>::sentinel QStringTokenizer::end() const

목록의 마지막 토큰 뒤에 있는 가상의 토큰을 가리키는 상수 STL 스타일 센티널을 반환합니다.

begin() 및 cend()도 참조하세요 .

template <typename LContainer> LContainer QStringTokenizer::toContainer(LContainer &&c = {}) const &

지연 시퀀스를 (일반적으로) LContainer 유형의 랜덤 액세스 컨테이너로 변환합니다.

이 함수는 Container 에 이 토큰화기의 value_type 와 일치하는 value_type 이 있는 경우에만 사용할 수 있습니다.

c 에 대한 명명된 컨테이너(l값)를 전달하면 해당 컨테이너가 채워지고 해당 컨테이너에 대한 참조가 반환됩니다. 임시 컨테이너(기본 인수를 포함한 rvalue)를 전달하면 해당 컨테이너가 채워지고 값으로 반환됩니다.

// assuming tok's value_type is QStringView, then...
auto tok = QStringTokenizer{~~~};
// ... rac1 is a QList:
auto rac1 = tok.toContainer();
// ... rac2 is std::pmr::vector<QStringView>:
auto rac2 = tok.toContainer<std::pmr::vector<QStringView>>();
auto rac3 = QVarLengthArray<QStringView, 12>{};
// appends the token sequence produced by tok to rac3
//  and returns a reference to rac3 (which we ignore here):
tok.toContainer(rac3);

이렇게 하면 시퀀스를 저장하는 방식에 최대한의 유연성을 부여할 수 있습니다.

template <typename RContainer> RContainer QStringTokenizer::toContainer(RContainer &&c = {}) const &&

이 함수는 오버로드된 함수입니다.

지연 시퀀스를 (일반적으로) RContainer 유형의 랜덤 액세스 컨테이너로 변환합니다.

lvalue-이 오버로드에 대한 제약 조건 외에도, 이 rvalue-이 오버로드는 QStringTokenizer 이 내부적으로 건초 더미를 저장하지 않을 때만 사용할 수 있는데, 이는 매달린 참조로 가득 찬 컨테이너를 생성할 수 있기 때문입니다:

auto tokens = QStringTokenizer{widget.text(), u','}.toContainer();
// ERROR: cannot call toContainer() on rvalue
// 'tokens' references the data of the copy of widget.text()
// stored inside the QStringTokenizer, which has since been deleted

이 문제를 해결하려면 QStringTokenizer 을 임시로 저장하세요:

auto tokenizer = QStringTokenizer{widget.text90, u','};
auto tokens = tokenizer.toContainer();
// OK: the copy of widget.text() stored in 'tokenizer' keeps the data
// referenced by 'tokens' alive.

대신 뷰를 전달하여 이 함수를 강제 실행할 수 있습니다:

func(QStringTokenizer{QStringView{widget.text()}, u','}.toContainer());
// OK: compiler keeps widget.text() around until after func() has executed

c 에 대해 명명된 컨테이너(lvalue)를 전달하면 해당 컨테이너가 채워지고 해당 컨테이너에 대한 참조가 반환됩니다. 임시 컨테이너(기본 인수를 포함한 rvalue)를 전달하면 해당 컨테이너가 채워지고 값으로 반환됩니다.

관련 비회원

[constexpr noexcept(...), since 6.0] template <typename Haystack, typename Needle, typename... Flags> auto qTokenize(Haystack &&haystack, Needle &&needle, Flags... flags)

haystack 문자열을 needle 이 발생할 때마다 하위 문자열로 분할하고 해당 문자열이 발견될 때마다 반복할 수 있도록 하는 QStringTokenizer 의 팩토리 함수입니다. needlehaystack 의 어느 곳과도 일치하지 않으면 haystack 를 포함하는 단일 요소가 생성됩니다.

Qt::CaseSensitivityQt::SplitBehavior 열거자의 값을 flags 로 전달하여 토큰화기의 동작을 수정합니다.

이 함수는 Qt 6.0에 도입되었습니다.

참고: 이 함수는 QtPrivate::Tok::is_nothrow_constructible_from<Haystack, Needle>::valuetrue 인 경우를 제외하고는 작동하지 않습니다.

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.