96 std::u32string m_string;
99 template <
typename StringViewType>
100 using IsStringViewType = std::enable_if_t<
101 std::is_same_v<StringViewType, std::string_view>
102#if defined(__cpp_lib_char8_t) && (__cpp_lib_char8_t >= 201811L)
103 || std::is_same_v<StringViewType, std::u8string_view>
105 || std::is_same_v<StringViewType, std::wstring_view> || std::is_same_v<StringViewType, std::u16string_view>
106 || std::is_same_v<StringViewType, std::u32string_view>,
112 template <
typename IteratorType>
113 using IsU32Iterator = std::enable_if_t<std::is_convertible_v<IteratorType, std::u32string::const_iterator>
114 || std::is_convertible_v<IteratorType, StringView::const_iterator>,
118 static constexpr auto npos = std::u32string_view::npos;
120 using iterator = std::u32string::iterator;
121 using const_iterator = std::u32string::const_iterator;
122 using reverse_iterator = std::u32string::reverse_iterator;
123 using const_reverse_iterator = std::u32string::const_reverse_iterator;
125 using value_type = char32_t;
126 using reference =
char32_t&;
127 using const_reference =
const char32_t&;
164 [[nodiscard]]
int toInt(
int defaultValue = 0)
const;
173 [[nodiscard]]
unsigned int toUInt(
unsigned int defaultValue = 0)
const;
182 [[nodiscard]]
float toFloat(
float defaultValue = 0)
const;
189 [[nodiscard]] String
trim()
const;
214#ifndef TGUI_REMOVE_DEPRECATED_CODE
224 TGUI_DEPRECATED(
"Use starts_with instead") [[nodiscard]]
bool startsWith(
const String& substring)
const;
236#ifndef TGUI_REMOVE_DEPRECATED_CODE
246 TGUI_DEPRECATED(
"Use ends_with instead") [[nodiscard]]
bool endsWith(
const String& substring)
const;
266 String&
replace(
const String& searchFor,
const String& replaceWith);
281 [[nodiscard]] std::vector<String>
split(
const String& delimiter,
bool trim =
false)
const;
289 [[nodiscard]]
static String
join(
const std::vector<String>& segments,
const String& separator);
298 template <
typename T>
304 if constexpr (std::is_integral_v<T>)
306 return {std::to_string(value)};
310 std::ostringstream oss;
311 oss.imbue(std::locale::classic());
325 template <
typename T>
331 if constexpr (std::is_integral_v<T>)
332 return {std::to_string(value)};
335 std::ostringstream oss;
336 oss.imbue(std::locale::classic());
337 oss << std::fixed << std::setprecision(static_cast<int>(decimals));
348 String(
const std::string& str);
349 String(
const std::wstring& str);
350 String(
const std::u16string& str);
351 String(
const std::u32string& str);
353 String(std::u32string&& str) :
354 m_string{std::move(str)}
358 String(
char ansiChar);
359 String(
wchar_t wideChar);
360 String(
char16_t utfChar);
361 String(
char32_t utfChar);
363 String(
const char* str);
364 String(
const wchar_t* str);
365 String(
const char16_t* str);
366 String(
const char32_t* str) :
372 template <
typename T,
typename =
typename std::enable_if_t<std::is_arithmetic_v<T>, T>>
373 explicit String(T number) :
374 String{fromNumber(number)}
378 String(std::size_t count,
char ch);
379 String(std::size_t count,
wchar_t ch);
380 String(std::size_t count,
char16_t ch);
381 String(std::size_t count,
char32_t ch);
383 String(
const std::string& str, std::size_t pos);
384 String(
const std::wstring& str, std::size_t pos);
385 String(
const std::u16string& str, std::size_t pos);
386 String(
const std::u32string& str, std::size_t pos);
388 String(
const std::string& str, std::size_t pos, std::size_t count);
389 String(
const std::wstring& str, std::size_t pos, std::size_t count);
390 String(
const std::u16string& str, std::size_t pos, std::size_t count);
391 String(
const std::u32string& str, std::size_t pos, std::size_t count);
393 String(
const char* str, std::size_t count);
394 String(
const wchar_t* str, std::size_t count);
395 String(
const char16_t* str, std::size_t count);
396 String(
const char32_t* str, std::size_t count);
398 explicit String(std::initializer_list<char> chars);
399 explicit String(std::initializer_list<wchar_t> chars);
400 explicit String(std::initializer_list<char16_t> chars);
401 explicit String(std::initializer_list<char32_t> chars);
407 explicit String(std::string::const_iterator first, std::string::const_iterator last);
408 explicit String(std::wstring::const_iterator first, std::wstring::const_iterator last);
409 explicit String(std::u16string::const_iterator first, std::u16string::const_iterator last);
410 explicit String(std::u32string::const_iterator first, std::u32string::const_iterator last);
412 template <
typename StringViewType,
typename = IsStringViewType<StringViewType>>
413 explicit String(
const StringViewType& stringView) :
414 String(stringView.data(), stringView.size())
418 template <
typename StringViewType,
typename = IsStringViewType<StringViewType>>
419 explicit String(
const StringViewType& stringView, std::size_t pos, std::size_t count) :
420 String(stringView.data() + pos, count)
424#if TGUI_HAS_WINDOW_BACKEND_SFML
426 explicit String(
const sf::String& str) :
427 #if SFML_VERSION_MAJOR >= 3
428 m_string{str.toUtf32()}
430 m_string{reinterpret_cast<const char32_t*>(str.toUtf32().c_str())}
435 #if (SFML_VERSION_MAJOR < 3) || (SFML_VERSION_MAJOR == 3 && SFML_VERSION_MINOR < 1)
437 explicit operator sf::String()
const
439 return sf::String::fromUtf32(m_string.cbegin(), m_string.cend());
444 explicit operator std::string()
const;
445 explicit operator std::wstring()
const;
446 explicit operator std::u16string()
const;
447 explicit operator const std::u32string&()
const
452 operator StringView() const noexcept
457 [[nodiscard]] std::string toStdString()
const;
458 [[nodiscard]] std::wstring toWideString()
const;
459 [[nodiscard]] std::u16string toUtf16()
const;
460 [[nodiscard]]
const std::u32string& toUtf32()
const
465 String& assign(std::size_t count,
char ch);
466 String& assign(std::size_t count,
wchar_t ch);
467 String& assign(std::size_t count,
char16_t ch);
468 String& assign(std::size_t count,
char32_t ch);
470 String& assign(StringView sv);
471 String& assign(
const char32_t* str);
472 String& assign(
const std::u32string& str);
473 String& assign(
const String& str);
475 String& assign(StringView sv, std::size_t pos, std::size_t count = npos);
476 String& assign(
const std::string& str, std::size_t pos, std::size_t count = npos);
477 String& assign(
const std::wstring& str, std::size_t pos, std::size_t count = npos);
478 String& assign(
const std::u16string& str, std::size_t pos, std::size_t count = npos);
479 String& assign(
const std::u32string& str, std::size_t pos, std::size_t count = npos);
480 String& assign(
const String& str, std::size_t pos, std::size_t count = npos);
482 String& assign(std::u32string&& str);
483 String& assign(String&& str);
485 String& assign(
const char* str, std::size_t count);
486 String& assign(
const wchar_t* str, std::size_t count);
487 String& assign(
const char16_t* str, std::size_t count);
488 String& assign(
const char32_t* str, std::size_t count);
490 String& assign(std::initializer_list<char> chars);
491 String& assign(std::initializer_list<wchar_t> chars);
492 String& assign(std::initializer_list<char16_t> chars);
493 String& assign(std::initializer_list<char32_t> chars);
495 String& assign(std::string::const_iterator first, std::string::const_iterator last);
496 String& assign(std::wstring::const_iterator first, std::wstring::const_iterator last);
497 String& assign(std::u16string::const_iterator first, std::u16string::const_iterator last);
499 template <
typename IteratorType,
typename = IsU32Iterator<IteratorType>>
500 String& assign(IteratorType first, IteratorType last)
502 m_string.assign(first, last);
506 [[nodiscard]] reference at(std::size_t pos);
507 [[nodiscard]] const_reference at(std::size_t pos)
const;
509 [[nodiscard]] const_reference operator[](std::size_t index)
const;
510 [[nodiscard]] reference operator[](std::size_t index);
512 [[nodiscard]] reference front();
513 [[nodiscard]] const_reference front()
const;
515 [[nodiscard]] reference back();
516 [[nodiscard]] const_reference back()
const;
518 [[nodiscard]]
const char32_t* data() const noexcept
520 return m_string.data();
523 [[nodiscard]]
char32_t* data() noexcept
525 return m_string.data();
528 [[nodiscard]]
const char32_t* c_str() const noexcept
530 return m_string.c_str();
533 [[nodiscard]] iterator begin() noexcept;
534 [[nodiscard]] const_iterator begin() const noexcept;
535 [[nodiscard]] const_iterator cbegin() const noexcept;
537 [[nodiscard]] iterator end() noexcept;
538 [[nodiscard]] const_iterator end() const noexcept;
539 [[nodiscard]] const_iterator cend() const noexcept;
541 [[nodiscard]] reverse_iterator rbegin() noexcept;
542 [[nodiscard]] const_reverse_iterator rbegin() const noexcept;
543 [[nodiscard]] const_reverse_iterator crbegin() const noexcept;
545 [[nodiscard]] reverse_iterator rend() noexcept;
546 [[nodiscard]] const_reverse_iterator rend() const noexcept;
547 [[nodiscard]] const_reverse_iterator crend() const noexcept;
549 [[nodiscard]]
bool empty() const noexcept
551 return m_string.empty();
554 [[nodiscard]] std::size_t size() const noexcept
556 return m_string.size();
559 [[nodiscard]] std::size_t length() const noexcept
561 return m_string.length();
564 [[nodiscard]] std::size_t max_size() const noexcept;
566 void reserve(std::
size_t newCap);
567 [[nodiscard]] std::
size_t capacity() const noexcept;
568 void shrink_to_fit();
570 void clear() noexcept;
572 String& insert(std::
size_t index, std::
size_t count,
char ch);
573 String& insert(std::
size_t index, std::
size_t count,
wchar_t ch);
574 String& insert(std::
size_t index, std::
size_t count,
char16_t ch);
575 String& insert(std::
size_t index, std::
size_t count,
char32_t ch);
577 String& insert(std::
size_t index, StringView sv);
578 String& insert(std::
size_t index, const
char32_t* str);
579 String& insert(std::
size_t index, const std::u32string& str);
580 String& insert(std::
size_t index, const String& str);
582 String& insert(std::
size_t index, StringView sv, std::
size_t pos, std::
size_t count = npos);
583 String& insert(std::
size_t index, const std::
string& str, std::
size_t pos, std::
size_t count = npos);
584 String& insert(std::
size_t index, const std::wstring& str, std::
size_t pos, std::
size_t count = npos);
585 String& insert(std::
size_t index, const std::u16string& str, std::
size_t pos, std::
size_t count = npos);
586 String& insert(std::
size_t index, const std::u32string& str, std::
size_t pos, std::
size_t count = npos);
587 String& insert(std::
size_t index, const String& str, std::
size_t pos, std::
size_t count = npos);
589 String& insert(std::
size_t index, const
char* str, std::
size_t count);
590 String& insert(std::
size_t index, const
wchar_t* str, std::
size_t count);
591 String& insert(std::
size_t index, const
char16_t* str, std::
size_t count);
592 String& insert(std::
size_t index, const
char32_t* str, std::
size_t count);
594 iterator insert(const_iterator pos,
char ch);
595 iterator insert(const_iterator pos,
wchar_t ch);
596 iterator insert(const_iterator pos,
char16_t ch);
597 iterator insert(const_iterator pos,
char32_t ch);
599 iterator insert(const_iterator pos, std::
size_t count,
char ch);
600 iterator insert(const_iterator pos, std::
size_t count,
wchar_t ch);
601 iterator insert(const_iterator pos, std::
size_t count,
char16_t ch);
602 iterator insert(const_iterator pos, std::
size_t count,
char32_t ch);
604 iterator insert(const_iterator pos, std::initializer_list<
char> chars);
605 iterator insert(const_iterator pos, std::initializer_list<
wchar_t> chars);
606 iterator insert(const_iterator pos, std::initializer_list<
char16_t> chars);
607 iterator insert(const_iterator pos, std::initializer_list<
char32_t> chars);
609 iterator insert(const_iterator pos, std::
string::const_iterator first, std::
string::const_iterator last);
610 iterator insert(const_iterator pos, std::wstring::const_iterator first, std::wstring::const_iterator last);
611 iterator insert(const_iterator pos, std::u16string::const_iterator first, std::u16string::const_iterator last);
613 template <typename IteratorType, typename = IsU32Iterator<IteratorType>>
614 String& insert(const_iterator pos, IteratorType first, IteratorType last)
616 m_string.insert(pos, first, last);
620 String& erase(std::size_t index = 0, std::size_t count = npos);
622 iterator erase(const_iterator position);
623 iterator erase(const_iterator first, const_iterator last);
625 void push_back(
char ch);
626 void push_back(
wchar_t ch);
627 void push_back(
char16_t ch);
628 void push_back(
char32_t ch);
632 String& append(std::size_t count,
char ch);
633 String& append(std::size_t count,
wchar_t ch);
634 String& append(std::size_t count,
char16_t ch);
635 String& append(std::size_t count,
char32_t ch);
637 String& append(StringView sv);
638 String& append(
const char32_t* str);
639 String& append(
const std::u32string& str);
640 String& append(
const String& str);
642 String& append(StringView sv, std::size_t pos, std::size_t count = npos);
643 String& append(
const std::string& str, std::size_t pos, std::size_t count = npos);
644 String& append(
const std::wstring& str, std::size_t pos, std::size_t count = npos);
645 String& append(
const std::u16string& str, std::size_t pos, std::size_t count = npos);
646 String& append(
const std::u32string& str, std::size_t pos, std::size_t count = npos);
647 String& append(
const String& str, std::size_t pos, std::size_t count = npos);
649 String& append(
const char* str, std::size_t count);
650 String& append(
const wchar_t* str, std::size_t count);
651 String& append(
const char16_t* str, std::size_t count);
652 String& append(
const char32_t* str, std::size_t count);
654 String& append(std::string::const_iterator first, std::string::const_iterator last);
655 String& append(std::wstring::const_iterator first, std::wstring::const_iterator last);
656 String& append(std::u16string::const_iterator first, std::u16string::const_iterator last);
658 template <
typename IteratorType,
typename = IsU32Iterator<IteratorType>>
659 String& append(IteratorType first, IteratorType last)
661 m_string.append(first, last);
665 String& append(std::initializer_list<char> chars);
666 String& append(std::initializer_list<wchar_t> chars);
667 String& append(std::initializer_list<char16_t> chars);
668 String& append(std::initializer_list<char32_t> chars);
670 String& operator+=(
const String& str);
672 [[nodiscard]]
int compare(StringView sv)
const noexcept;
673 [[nodiscard]]
int compare(
const char32_t* s)
const;
674 [[nodiscard]]
int compare(
const std::u32string& str)
const noexcept;
675 [[nodiscard]]
int compare(
const String& str)
const noexcept;
677 [[nodiscard]]
int compare(std::size_t pos1, std::size_t count1, StringView sv)
const;
678 [[nodiscard]]
int compare(std::size_t pos1, std::size_t count1,
const char32_t* s)
const;
679 [[nodiscard]]
int compare(std::size_t pos1, std::size_t count1,
const std::u32string& str)
const;
680 [[nodiscard]]
int compare(std::size_t pos1, std::size_t count1,
const String& str)
const;
682 [[nodiscard]]
int compare(std::size_t pos1, std::size_t count1, StringView sv, std::size_t pos2, std::size_t count2 = npos)
const;
683 [[nodiscard]]
int compare(std::size_t pos1,
685 const std::string& str,
687 std::size_t count2 = npos)
const;
688 [[nodiscard]]
int compare(std::size_t pos1,
690 const std::wstring& str,
692 std::size_t count2 = npos)
const;
693 [[nodiscard]]
int compare(std::size_t pos1,
695 const std::u16string& str,
697 std::size_t count2 = npos)
const;
698 [[nodiscard]]
int compare(std::size_t pos1,
700 const std::u32string& str,
702 std::size_t count2 = npos)
const;
703 [[nodiscard]]
int compare(std::size_t pos1, std::size_t count1,
const String& str, std::size_t pos2, std::size_t count2 = npos)
const;
705 [[nodiscard]]
int compare(std::size_t pos1, std::size_t count1,
const char* s, std::size_t count2)
const;
706 [[nodiscard]]
int compare(std::size_t pos1, std::size_t count1,
const wchar_t* s, std::size_t count2)
const;
707 [[nodiscard]]
int compare(std::size_t pos1, std::size_t count1,
const char16_t* s, std::size_t count2)
const;
708 [[nodiscard]]
int compare(std::size_t pos1, std::size_t count1,
const char32_t* s, std::size_t count2)
const;
710 String& replace(std::size_t pos, std::size_t count, StringView sv);
711 String& replace(std::size_t pos, std::size_t count,
const char32_t* cstr);
712 String& replace(std::size_t pos, std::size_t count,
const std::u32string& str);
713 String& replace(std::size_t pos, std::size_t count,
const String& str);
715 String& replace(const_iterator first, const_iterator last, StringView sv);
716 String& replace(const_iterator first, const_iterator last,
const char32_t* cstr);
717 String& replace(const_iterator first, const_iterator last,
const std::u32string& str);
718 String& replace(const_iterator first, const_iterator last,
const String& str);
720 String& replace(std::size_t pos, std::size_t count, StringView sv, std::size_t pos2, std::size_t count2 = npos);
721 String& replace(std::size_t pos, std::size_t count,
const std::string& str, std::size_t pos2, std::size_t count2 = npos);
722 String& replace(std::size_t pos, std::size_t count,
const std::wstring& str, std::size_t pos2, std::size_t count2 = npos);
723 String& replace(std::size_t pos, std::size_t count,
const std::u16string& str, std::size_t pos2, std::size_t count2 = npos);
724 String& replace(std::size_t pos, std::size_t count,
const std::u32string& str, std::size_t pos2, std::size_t count2 = npos);
725 String& replace(std::size_t pos, std::size_t count,
const String& str, std::size_t pos2, std::size_t count2 = npos);
727 String& replace(const_iterator first, const_iterator last, std::string::const_iterator first2, std::string::const_iterator last2);
728 String& replace(const_iterator first, const_iterator last, std::wstring::const_iterator first2, std::wstring::const_iterator last2);
729 String& replace(const_iterator first,
731 std::u16string::const_iterator first2,
732 std::u16string::const_iterator last2);
734 template <
typename IteratorType,
typename = IsU32Iterator<IteratorType>>
735 String& replace(const_iterator first, const_iterator last, IteratorType first2, IteratorType last2)
737 m_string.replace(first, last, first2, last2);
741 String& replace(std::size_t pos, std::size_t count,
const char* cstr, std::size_t count2);
742 String& replace(std::size_t pos, std::size_t count,
const wchar_t* cstr, std::size_t count2);
743 String& replace(std::size_t pos, std::size_t count,
const char16_t* cstr, std::size_t count2);
744 String& replace(std::size_t pos, std::size_t count,
const char32_t* cstr, std::size_t count2);
746 String& replace(const_iterator first, const_iterator last,
const char* cstr, std::size_t count2);
747 String& replace(const_iterator first, const_iterator last,
const wchar_t* cstr, std::size_t count2);
748 String& replace(const_iterator first, const_iterator last,
const char16_t* cstr, std::size_t count2);
749 String& replace(const_iterator first, const_iterator last,
const char32_t* cstr, std::size_t count2);
751 String& replace(std::size_t pos, std::size_t count, std::size_t count2,
char ch);
752 String& replace(std::size_t pos, std::size_t count, std::size_t count2,
wchar_t ch);
753 String& replace(std::size_t pos, std::size_t count, std::size_t count2,
char16_t ch);
754 String& replace(std::size_t pos, std::size_t count, std::size_t count2,
char32_t ch);
756 String& replace(const_iterator first, const_iterator last, std::size_t count2,
char ch);
757 String& replace(const_iterator first, const_iterator last, std::size_t count2,
wchar_t ch);
758 String& replace(const_iterator first, const_iterator last, std::size_t count2,
char16_t ch);
759 String& replace(const_iterator first, const_iterator last, std::size_t count2,
char32_t ch);
761 String& replace(const_iterator first, const_iterator last, std::initializer_list<char> chars);
762 String& replace(const_iterator first, const_iterator last, std::initializer_list<wchar_t> chars);
763 String& replace(const_iterator first, const_iterator last, std::initializer_list<char16_t> chars);
764 String& replace(const_iterator first, const_iterator last, std::initializer_list<char32_t> chars);
766 [[nodiscard]] String substr(std::size_t pos = 0, std::size_t count = npos)
const;
768 std::size_t copy(
char32_t* dest, std::size_t count, std::size_t pos = 0)
const;
770 void resize(std::size_t count);
771 void resize(std::size_t count,
char ch);
772 void resize(std::size_t count,
wchar_t ch);
773 void resize(std::size_t count,
char16_t ch);
774 void resize(std::size_t count,
char32_t ch);
776 void swap(String& other)
noexcept;
778 [[nodiscard]]
bool contains(
char c)
const noexcept;
779 [[nodiscard]]
bool contains(
wchar_t c)
const noexcept;
780 [[nodiscard]]
bool contains(
char16_t c)
const noexcept;
781 [[nodiscard]]
bool contains(
char32_t c)
const noexcept;
783 [[nodiscard]]
bool contains(StringView sv)
const noexcept;
784 [[nodiscard]]
bool contains(
const char32_t* s)
const;
785 [[nodiscard]]
bool contains(
const std::u32string& s)
const;
786 [[nodiscard]]
bool contains(
const String& s)
const;
788 [[nodiscard]] std::size_t find(StringView sv, std::size_t pos = 0) const noexcept;
789 [[nodiscard]] std::
size_t find(const
char32_t* s, std::
size_t pos = 0) const;
790 [[nodiscard]] std::
size_t find(const std::u32string& str, std::
size_t pos = 0) const noexcept;
791 [[nodiscard]] std::
size_t find(const String& str, std::
size_t pos = 0) const noexcept;
793 [[nodiscard]] std::
size_t find(const
char* s, std::
size_t pos, std::
size_t count) const;
794 [[nodiscard]] std::
size_t find(const
wchar_t* s, std::
size_t pos, std::
size_t count) const;
795 [[nodiscard]] std::
size_t find(const
char16_t* s, std::
size_t pos, std::
size_t count) const;
796 [[nodiscard]] std::
size_t find(const
char32_t* s, std::
size_t pos, std::
size_t count) const;
798 [[nodiscard]] std::
size_t find(
char ch, std::
size_t pos = 0) const noexcept;
799 [[nodiscard]] std::
size_t find(
wchar_t ch, std::
size_t pos = 0) const noexcept;
800 [[nodiscard]] std::
size_t find(
char16_t ch, std::
size_t pos = 0) const noexcept;
801 [[nodiscard]] std::
size_t find(
char32_t ch, std::
size_t pos = 0) const noexcept;
803 [[nodiscard]] std::
size_t find_first_of(StringView sv, std::
size_t pos = 0) const noexcept;
804 [[nodiscard]] std::
size_t find_first_of(const
char32_t* s, std::
size_t pos = 0) const;
805 [[nodiscard]] std::
size_t find_first_of(const std::u32string& str, std::
size_t pos = 0) const noexcept;
806 [[nodiscard]] std::
size_t find_first_of(const String& str, std::
size_t pos = 0) const noexcept;
808 [[nodiscard]] std::
size_t find_first_of(const
char* s, std::
size_t pos, std::
size_t count) const;
809 [[nodiscard]] std::
size_t find_first_of(const
wchar_t* s, std::
size_t pos, std::
size_t count) const;
810 [[nodiscard]] std::
size_t find_first_of(const
char16_t* s, std::
size_t pos, std::
size_t count) const;
811 [[nodiscard]] std::
size_t find_first_of(const
char32_t* s, std::
size_t pos, std::
size_t count) const;
813 [[nodiscard]] std::
size_t find_first_of(
char ch, std::
size_t pos = 0) const noexcept;
814 [[nodiscard]] std::
size_t find_first_of(
wchar_t ch, std::
size_t pos = 0) const noexcept;
815 [[nodiscard]] std::
size_t find_first_of(
char16_t ch, std::
size_t pos = 0) const noexcept;
816 [[nodiscard]] std::
size_t find_first_of(
char32_t ch, std::
size_t pos = 0) const noexcept;
818 [[nodiscard]] std::
size_t find_first_not_of(StringView sv, std::
size_t pos = 0) const noexcept;
819 [[nodiscard]] std::
size_t find_first_not_of(const
char32_t* s, std::
size_t pos = 0) const;
820 [[nodiscard]] std::
size_t find_first_not_of(const std::u32string& str, std::
size_t pos = 0) const noexcept;
821 [[nodiscard]] std::
size_t find_first_not_of(const String& str, std::
size_t pos = 0) const noexcept;
823 [[nodiscard]] std::
size_t find_first_not_of(const
char* s, std::
size_t pos, std::
size_t count) const;
824 [[nodiscard]] std::
size_t find_first_not_of(const
wchar_t* s, std::
size_t pos, std::
size_t count) const;
825 [[nodiscard]] std::
size_t find_first_not_of(const
char16_t* s, std::
size_t pos, std::
size_t count) const;
826 [[nodiscard]] std::
size_t find_first_not_of(const
char32_t* s, std::
size_t pos, std::
size_t count) const;
828 [[nodiscard]] std::
size_t find_first_not_of(
char ch, std::
size_t pos = 0) const noexcept;
829 [[nodiscard]] std::
size_t find_first_not_of(
wchar_t ch, std::
size_t pos = 0) const noexcept;
830 [[nodiscard]] std::
size_t find_first_not_of(
char16_t ch, std::
size_t pos = 0) const noexcept;
831 [[nodiscard]] std::
size_t find_first_not_of(
char32_t ch, std::
size_t pos = 0) const noexcept;
833 [[nodiscard]] std::
size_t rfind(StringView sv, std::
size_t pos = npos) const noexcept;
834 [[nodiscard]] std::
size_t rfind(const
char32_t* s, std::
size_t pos = npos) const;
835 [[nodiscard]] std::
size_t rfind(const std::u32string& str, std::
size_t pos = npos) const noexcept;
836 [[nodiscard]] std::
size_t rfind(const String& str, std::
size_t pos = npos) const noexcept;
838 [[nodiscard]] std::
size_t rfind(const
char* s, std::
size_t pos, std::
size_t count) const;
839 [[nodiscard]] std::
size_t rfind(const
wchar_t* s, std::
size_t pos, std::
size_t count) const;
840 [[nodiscard]] std::
size_t rfind(const
char16_t* s, std::
size_t pos, std::
size_t count) const;
841 [[nodiscard]] std::
size_t rfind(const
char32_t* s, std::
size_t pos, std::
size_t count) const;
843 [[nodiscard]] std::
size_t rfind(
char ch, std::
size_t pos = npos) const noexcept;
844 [[nodiscard]] std::
size_t rfind(
wchar_t ch, std::
size_t pos = npos) const noexcept;
845 [[nodiscard]] std::
size_t rfind(
char16_t ch, std::
size_t pos = npos) const noexcept;
846 [[nodiscard]] std::
size_t rfind(
char32_t ch, std::
size_t pos = npos) const noexcept;
848 [[nodiscard]] std::
size_t find_last_of(StringView sv, std::
size_t pos = npos) const noexcept;
849 [[nodiscard]] std::
size_t find_last_of(const
char32_t* s, std::
size_t pos = npos) const;
850 [[nodiscard]] std::
size_t find_last_of(const std::u32string& str, std::
size_t pos = npos) const noexcept;
851 [[nodiscard]] std::
size_t find_last_of(const String& str, std::
size_t pos = npos) const noexcept;
853 [[nodiscard]] std::
size_t find_last_of(const
char* s, std::
size_t pos, std::
size_t count) const;
854 [[nodiscard]] std::
size_t find_last_of(const
wchar_t* s, std::
size_t pos, std::
size_t count) const;
855 [[nodiscard]] std::
size_t find_last_of(const
char16_t* s, std::
size_t pos, std::
size_t count) const;
856 [[nodiscard]] std::
size_t find_last_of(const
char32_t* s, std::
size_t pos, std::
size_t count) const;
858 [[nodiscard]] std::
size_t find_last_of(
char ch, std::
size_t pos = npos) const noexcept;
859 [[nodiscard]] std::
size_t find_last_of(
wchar_t ch, std::
size_t pos = npos) const noexcept;
860 [[nodiscard]] std::
size_t find_last_of(
char16_t ch, std::
size_t pos = npos) const noexcept;
861 [[nodiscard]] std::
size_t find_last_of(
char32_t ch, std::
size_t pos = npos) const noexcept;
863 [[nodiscard]] std::
size_t find_last_not_of(StringView sv, std::
size_t pos = npos) const noexcept;
864 [[nodiscard]] std::
size_t find_last_not_of(const
char32_t* s, std::
size_t pos = npos) const;
865 [[nodiscard]] std::
size_t find_last_not_of(const std::u32string& str, std::
size_t pos = npos) const noexcept;
866 [[nodiscard]] std::
size_t find_last_not_of(const String& str, std::
size_t pos = npos) const noexcept;
868 [[nodiscard]] std::
size_t find_last_not_of(const
char* s, std::
size_t pos, std::
size_t count) const;
869 [[nodiscard]] std::
size_t find_last_not_of(const
wchar_t* s, std::
size_t pos, std::
size_t count) const;
870 [[nodiscard]] std::
size_t find_last_not_of(const
char16_t* s, std::
size_t pos, std::
size_t count) const;
871 [[nodiscard]] std::
size_t find_last_not_of(const
char32_t* s, std::
size_t pos, std::
size_t count) const;
873 [[nodiscard]] std::
size_t find_last_not_of(
char ch, std::
size_t pos = npos) const noexcept;
874 [[nodiscard]] std::
size_t find_last_not_of(
wchar_t ch, std::
size_t pos = npos) const noexcept;
875 [[nodiscard]] std::
size_t find_last_not_of(
char16_t ch, std::
size_t pos = npos) const noexcept;
876 [[nodiscard]] std::
size_t find_last_not_of(
char32_t ch, std::
size_t pos = npos) const noexcept;
878 [[nodiscard]] inline
bool starts_with(StringView sv) const noexcept;
879 [[nodiscard]] inline
bool starts_with(const
char32_t* s) const;
880 [[nodiscard]] inline
bool starts_with(const std::u32string& s) const;
881 [[nodiscard]] inline
bool starts_with(const String& s) const;
883 [[nodiscard]] inline
bool starts_with(
char ch) const noexcept;
884 [[nodiscard]] inline
bool starts_with(
wchar_t ch) const noexcept;
885 [[nodiscard]] inline
bool starts_with(
char16_t ch) const noexcept;
886 [[nodiscard]] inline
bool starts_with(
char32_t ch) const noexcept;
888 [[nodiscard]] inline
bool ends_with(StringView sv) const noexcept;
889 [[nodiscard]] inline
bool ends_with(const
char32_t* s) const;
890 [[nodiscard]] inline
bool ends_with(const std::u32string& s) const;
891 [[nodiscard]] inline
bool ends_with(const String& s) const;
893 [[nodiscard]] inline
bool ends_with(
char ch) const noexcept;
894 [[nodiscard]] inline
bool ends_with(
wchar_t ch) const noexcept;
895 [[nodiscard]] inline
bool ends_with(
char16_t ch) const noexcept;
896 [[nodiscard]] inline
bool ends_with(
char32_t ch) const noexcept;
898 [[nodiscard]] std::
size_t count(
char ch, std::
size_t pos = 0) const noexcept;
899 [[nodiscard]] std::
size_t count(
wchar_t ch, std::
size_t pos = 0) const noexcept;
900 [[nodiscard]] std::
size_t count(
char16_t ch, std::
size_t pos = 0) const noexcept;
901 [[nodiscard]] std::
size_t count(
char32_t ch, std::
size_t pos = 0) const noexcept;
903 inline friend
bool operator==(const String& left, StringView right);
904 inline friend
bool operator==(const String& left, const
char32_t* right);
905 inline friend
bool operator==(const String& left, const std::u32string& right);
906 inline friend
bool operator==(const String& left, const String& right);
908 inline friend
bool operator!=(const String& left, StringView right);
909 inline friend
bool operator!=(const String& left, const
char32_t* right);
910 inline friend
bool operator!=(const String& left, const std::u32string& right);
911 inline friend
bool operator!=(const String& left, const String& right);
913 inline friend
bool operator<(const String& left, StringView right);
914 inline friend
bool operator<(const String& left, const
char32_t* right);
915 inline friend
bool operator<(const String& left, const std::u32string& right);
916 inline friend
bool operator<(const String& left, const String& right);
918 inline friend
bool operator<=(const String& left, StringView right);
919 inline friend
bool operator<=(const String& left, const
char32_t* right);
920 inline friend
bool operator<=(const String& left, const std::u32string& right);
921 inline friend
bool operator<=(const String& left, const String& right);
923 inline friend
bool operator>(const String& left, StringView right);
924 inline friend
bool operator>(const String& left, const
char32_t* right);
925 inline friend
bool operator>(const String& left, const std::u32string& right);
926 inline friend
bool operator>(const String& left, const String& right);
928 inline friend
bool operator>=(const String& left, StringView right);
929 inline friend
bool operator>=(const String& left, const
char32_t* right);
930 inline friend
bool operator>=(const String& left, const std::u32string& right);
931 inline friend
bool operator>=(const String& left, const String& right);
933 inline friend String operator+(const String& left, const String& right);
934 inline friend String operator+(const String& left, String&& right);
935 inline friend String operator+(String&& left, const String& right);
936 inline friend String operator+(String&& left, String&& right);
938#if defined(__cpp_lib_char8_t) && (__cpp_lib_char8_t >= 201811L)
939 inline String(
const std::u8string& str);
940 inline String(
char8_t utfChar);
941 inline String(
const char8_t* str);
942 inline String(std::size_t count,
char8_t ch);
943 inline String(
const std::u8string& str, std::size_t pos);
944 inline String(
const std::u8string& str, std::size_t pos, std::size_t count);
945 inline String(
const char8_t* str, std::size_t count);
946 inline explicit String(std::initializer_list<char8_t> chars);
947 inline explicit String(std::u8string::const_iterator first, std::u8string::const_iterator last);
949 inline explicit operator std::u8string()
const;
951 [[nodiscard]]
inline std::u8string toUtf8()
const;
953 inline String& assign(std::size_t count,
char8_t ch);
954 inline String& assign(
const std::u8string& str, std::size_t pos, std::size_t count = npos);
955 inline String& assign(
const char8_t* str, std::size_t count);
956 inline String& assign(std::initializer_list<char8_t> chars);
957 inline String& assign(std::u8string::const_iterator first, std::u8string::const_iterator last);
959 inline String& insert(std::size_t index, std::size_t count,
char8_t ch);
960 inline String& insert(std::size_t index,
const std::u8string& str, std::size_t pos, std::size_t count = npos);
961 inline String& insert(std::size_t index,
const char8_t* str, std::size_t count);
962 inline iterator insert(const_iterator pos,
char8_t ch);
963 inline iterator insert(const_iterator pos, std::size_t count,
char8_t ch);
964 inline iterator insert(const_iterator pos, std::initializer_list<char8_t> chars);
965 inline iterator insert(const_iterator pos, std::u8string::const_iterator first, std::u8string::const_iterator last);
967 inline String& append(std::size_t count,
char8_t ch);
968 inline String& append(
const std::u8string& str, std::size_t pos, std::size_t count = npos);
969 inline String& append(
const char8_t* str, std::size_t count);
970 inline String& append(std::initializer_list<char8_t> chars);
971 inline String& append(std::u8string::const_iterator first, std::u8string::const_iterator last);
973 [[nodiscard]]
inline int compare(std::size_t pos1,
975 const std::u8string& str,
977 std::size_t count2 = npos)
const;
978 [[nodiscard]]
inline int compare(std::size_t pos1, std::size_t count1,
const char8_t* s, std::size_t count2)
const;
980 inline String& replace(std::size_t pos, std::size_t count,
const std::u8string& str, std::size_t pos2, std::size_t count2 = npos);
981 inline String& replace(const_iterator first,
983 std::u8string::const_iterator first2,
984 std::u8string::const_iterator last2);
985 inline String& replace(std::size_t pos, std::size_t count,
const char8_t* cstr, std::size_t count2);
986 inline String& replace(const_iterator first, const_iterator last,
const char8_t* cstr, std::size_t count2);
987 inline String& replace(std::size_t pos, std::size_t count, std::size_t count2,
char8_t ch);
988 inline String& replace(const_iterator first, const_iterator last, std::size_t count2,
char8_t ch);
989 inline String& replace(const_iterator first, const_iterator last, std::initializer_list<char8_t> chars);
991 inline void resize(std::size_t count,
char8_t ch);
993 [[nodiscard]]
inline bool contains(
char8_t c)
const noexcept;
995 [[nodiscard]]
inline std::size_t find(
const char8_t* s, std::size_t pos, std::size_t count)
const;
996 [[nodiscard]]
inline std::size_t find(
char8_t ch, std::size_t pos = 0) const noexcept;
998 [[nodiscard]] inline std::
size_t find_first_of(const
char8_t* s, std::
size_t pos, std::
size_t count) const;
999 [[nodiscard]] inline std::
size_t find_first_of(
char8_t ch, std::
size_t pos = 0) const noexcept;
1001 [[nodiscard]] inline std::
size_t find_first_not_of(const
char8_t* s, std::
size_t pos, std::
size_t count) const;
1002 [[nodiscard]] inline std::
size_t find_first_not_of(
char8_t ch, std::
size_t pos = 0) const noexcept;
1004 [[nodiscard]] inline std::
size_t rfind(const
char8_t* s, std::
size_t pos, std::
size_t count) const;
1005 [[nodiscard]] inline std::
size_t rfind(
char8_t ch, std::
size_t pos = npos) const noexcept;
1007 [[nodiscard]] inline std::
size_t find_last_of(const
char8_t* s, std::
size_t pos, std::
size_t count) const;
1008 [[nodiscard]] inline std::
size_t find_last_of(
char8_t ch, std::
size_t pos = npos) const noexcept;
1010 [[nodiscard]] inline std::
size_t find_last_not_of(const
char8_t* s, std::
size_t pos, std::
size_t count) const;
1011 [[nodiscard]] inline std::
size_t find_last_not_of(
char8_t ch, std::
size_t pos = npos) const noexcept;
1013 [[nodiscard]] inline
bool starts_with(
char8_t ch) const noexcept;
1014 [[nodiscard]] inline
bool ends_with(
char8_t ch) const noexcept;