123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- // Copyright (c) 2012 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #ifndef BASE_STRINGS_STRING_SPLIT_H_
- #define BASE_STRINGS_STRING_SPLIT_H_
- #include <string>
- #include <utility>
- #include <vector>
- #include "base/base_export.h"
- #include "base/strings/string16.h"
- #include "base/strings/string_piece.h"
- #include "build/build_config.h"
- namespace base {
- enum WhitespaceHandling {
- KEEP_WHITESPACE,
- TRIM_WHITESPACE,
- };
- enum SplitResult {
- // Strictly return all results.
- //
- // If the input is ",," and the separator is ',' this will return a
- // vector of three empty strings.
- SPLIT_WANT_ALL,
- // Only nonempty results will be added to the results. Multiple separators
- // will be coalesced. Separators at the beginning and end of the input will
- // be ignored. With TRIM_WHITESPACE, whitespace-only results will be dropped.
- //
- // If the input is ",," and the separator is ',', this will return an empty
- // vector.
- SPLIT_WANT_NONEMPTY,
- };
- // Split the given string on ANY of the given separators, returning copies of
- // the result.
- //
- // Note this is inverse of JoinString() defined in string_util.h.
- //
- // To split on either commas or semicolons, keeping all whitespace:
- //
- // std::vector<std::string> tokens = base::SplitString(
- // input, ",;", base::KEEP_WHITESPACE, base::SPLIT_WANT_ALL);
- BASE_EXPORT std::vector<std::string> SplitString(StringPiece input,
- StringPiece separators,
- WhitespaceHandling whitespace,
- SplitResult result_type)
- WARN_UNUSED_RESULT;
- BASE_EXPORT std::vector<string16> SplitString(StringPiece16 input,
- StringPiece16 separators,
- WhitespaceHandling whitespace,
- SplitResult result_type)
- WARN_UNUSED_RESULT;
- // Like SplitString above except it returns a vector of StringPieces which
- // reference the original buffer without copying. Although you have to be
- // careful to keep the original string unmodified, this provides an efficient
- // way to iterate through tokens in a string.
- //
- // Note this is inverse of JoinString() defined in string_util.h.
- //
- // To iterate through all whitespace-separated tokens in an input string:
- //
- // for (const auto& cur :
- // base::SplitStringPiece(input, base::kWhitespaceASCII,
- // base::KEEP_WHITESPACE,
- // base::SPLIT_WANT_NONEMPTY)) {
- // ...
- BASE_EXPORT std::vector<StringPiece> SplitStringPiece(
- StringPiece input,
- StringPiece separators,
- WhitespaceHandling whitespace,
- SplitResult result_type) WARN_UNUSED_RESULT;
- BASE_EXPORT std::vector<StringPiece16> SplitStringPiece(
- StringPiece16 input,
- StringPiece16 separators,
- WhitespaceHandling whitespace,
- SplitResult result_type) WARN_UNUSED_RESULT;
- using StringPairs = std::vector<std::pair<std::string, std::string>>;
- // Splits |line| into key value pairs according to the given delimiters and
- // removes whitespace leading each key and trailing each value. Returns true
- // only if each pair has a non-empty key and value. |key_value_pairs| will
- // include ("","") pairs for entries without |key_value_delimiter|.
- BASE_EXPORT bool SplitStringIntoKeyValuePairs(StringPiece input,
- char key_value_delimiter,
- char key_value_pair_delimiter,
- StringPairs* key_value_pairs);
- // Similar to SplitStringIntoKeyValuePairs, but use a substring
- // |key_value_pair_delimiter| instead of a single char.
- BASE_EXPORT bool SplitStringIntoKeyValuePairsUsingSubstr(
- StringPiece input,
- char key_value_delimiter,
- StringPiece key_value_pair_delimiter,
- StringPairs* key_value_pairs);
- // Similar to SplitString, but use a substring delimiter instead of a list of
- // characters that are all possible delimiters.
- BASE_EXPORT std::vector<string16> SplitStringUsingSubstr(
- StringPiece16 input,
- StringPiece16 delimiter,
- WhitespaceHandling whitespace,
- SplitResult result_type) WARN_UNUSED_RESULT;
- BASE_EXPORT std::vector<std::string> SplitStringUsingSubstr(
- StringPiece input,
- StringPiece delimiter,
- WhitespaceHandling whitespace,
- SplitResult result_type) WARN_UNUSED_RESULT;
- // Like SplitStringUsingSubstr above except it returns a vector of StringPieces
- // which reference the original buffer without copying. Although you have to be
- // careful to keep the original string unmodified, this provides an efficient
- // way to iterate through tokens in a string.
- //
- // To iterate through all newline-separated tokens in an input string:
- //
- // for (const auto& cur :
- // base::SplitStringUsingSubstr(input, "\r\n",
- // base::KEEP_WHITESPACE,
- // base::SPLIT_WANT_NONEMPTY)) {
- // ...
- BASE_EXPORT std::vector<StringPiece16> SplitStringPieceUsingSubstr(
- StringPiece16 input,
- StringPiece16 delimiter,
- WhitespaceHandling whitespace,
- SplitResult result_type) WARN_UNUSED_RESULT;
- BASE_EXPORT std::vector<StringPiece> SplitStringPieceUsingSubstr(
- StringPiece input,
- StringPiece delimiter,
- WhitespaceHandling whitespace,
- SplitResult result_type) WARN_UNUSED_RESULT;
- } // namespace base
- #if defined(OS_WIN)
- #include "base/strings/string_split_win.h"
- #endif
- #endif // BASE_STRINGS_STRING_SPLIT_H_
|