Разное

Как в строке найти подстроку в строке: Найти подстроку в строке / Хабр

строки — Найти подстроку в строке и вставить туда значение

Вопрос задан

Изменён 1 год 3 месяца назад

Просмотрен 130 раз

Есть строка, у него есть подстрока table в строке их может быть N-ое количество. так же есть массив значений назовем его setValues, setValues.count будет равен количеству table в строке.

Задача состоит отследить все эти table и вставить после него значение из массива по индексу. К примеру если это первая подстрока table то после него вставляем setValues[0] и тд.

Проект на гитхаб

Вот что я сделал:

var string = "table table table"
let substring = "table"
let setValues = ["_o_", "_fo_", "_sen_"]
// Результат должен быть следующий:
// "table _o_ table _fo_ table _sen_"
var index = 0
var stepIndex = 0
var i = 0
var stringLoc = string
for char in string {
    if substring.
first == char { let startOfFoundCharacter = string.index(string.startIndex, offsetBy: index) let lengthOfFoundCharacter = string.index(string.startIndex, offsetBy: (substring.count + index)) let range = startOfFoundCharacter..<lengthOfFoundCharacter // если в строке нашли подстроку "table" if string.substring(with: range) == substring { stepIndex = index + substring.count let trueIndex = stringLoc.index(stringLoc.startIndex, offsetBy: stepIndex) stringLoc.insert(contentsOf: setValues[i], at: trueIndex) i += 1 } } index += 1 }

«Пробегаюсь» по всей строке ищу наш table достаю индекс вставляю нужное нам значение.

Но, надо учитывать, что, при каждой итерации наша строка меняется и

stepIndex надо двигать

  • строки
  • swift

Вот например так можно это реализовать, мы тут используем NSString для простоты операций с подстроками, тут мы используем range для ограничения области поиска после каждой замены

class ViewController: UIViewController {
    
    let string = "table table table"
    let substring = "table"
    let setValues = ["_o_", "_fo_", "_sen_"]
    
    var nsString: NSMutableString!
    var range: NSRange!
    override func viewDidLoad() {
        super. viewDidLoad()
        
        nsString = NSMutableString(string: string)
        range = NSMakeRange(0, nsString.length)
        
        for i in 0..<setValues.count {
            insertSubstring(" \(setValues[i])", after: substring)
        }
        print(nsString)
    }
    func insertSubstring(_ valueString: String, after searchString: String) {
        let nsRange = nsString.range(of: searchString, options: [], range: range)
        nsString.insert(valueString, at: nsRange.upperBound)
        let offset = nsRange.location + valueString.count
        range = NSMakeRange(offset, nsString.length - offset)
    }
}

2

Зарегистрируйтесь или войдите

Регистрация через Google

Регистрация через Facebook

Регистрация через почту

Отправить без регистрации

Почта

Необходима, но никому не показывается

Отправить без регистрации

Почта

Необходима, но никому не показывается

Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки

Как найти символ в строке python методом find() c примерами

Часто нам нужно найти символ в строке python. Для решения этой задачи разработчики используют метод find(). Он помогает найти индекс первого совпадения подстроки в строке. Если символ или подстрока не найдены, find возвращает -1.

Синтаксис

string.find(substring,start,end)

Метод find принимает три параметра:

  • substring (символ/подстрока) — подстрока, которую нужно найти в данной строке.
  • start (необязательный) — первый индекс, с которого нужно начинать поиск. По умолчанию значение равно 0.
  • end (необязательный) — индекс, на котором нужно закончить поиск. По умолчанию равно длине строки.

Поиск символов методом find() со значениями по умолчанию

Параметры, которые передаются в метод, — это подстрока, которую требуются найти, индекс начала и конца поиска. Значение по умолчанию для начала поиска — 0, а для конца — длина строки.

В этом примере используем метод со значениями по умолчанию.

Метод find() будет искать символ и вернет положение первого совпадения. Даже если символ встречается несколько раз, то метод вернет только положение первого совпадения.

Копировать Скопировано Use a different Browser


>>> string = "Добро пожаловать!"
>>> print("Индекс первой буквы 'о':", string.find("о"))
Индекс первой буквы 'о': 1

Поиск не с начала строки с аргументом start

Можно искать подстроку, указав также начальное положение поиска.

В этом примере обозначим стартовое положение значением 8 и метод начнет искать с символа с индексом 8. Последним положением будет длина строки — таким образом метод выполнит поиска с индекса 8 до окончания строки.

Копировать Скопировано Use a different Browser


>>> string = "Специалисты назвали плюсы и минусы Python"
>>> print("Индекс подстроки 'али' без учета первых 8 символов:", string.find("али", 8))
Индекс подстроки 'али' без учета первых 8 символов: 16

Поиск символа в подстроке со start и end

С помощью обоих аргументов (start и end) можно ограничить поиск и не проводить его по всей строке. Найдем индексы слова «пожаловать» и повторим поиск по букве «о».

Копировать Скопировано Use a different Browser


>>> string = "Добро пожаловать!"
>>> start = string.find("п")
>>> end = string.find("ь") + 1
>>> print("Индекс первой буквы 'о' в подстроке:", string.find("о", start, end))
Индекс первой буквы 'о' в подстроке: 7

Проверка есть ли символ в строке

Мы знаем, что метод find() позволяет найти индекс первого совпадения подстроки. Он возвращает -1 в том случае, если подстрока не была найдена.

Копировать Скопировано Use a different Browser


>>> string = "Добро пожаловать!"
>>> print("Есть буква 'г'?", string.find("г") != -1)
Есть буква 'г'? False
>>> print("Есть буква 'т'?", string.find("т") != -1)
Есть буква 'т'? True

Поиск последнего вхождения символа в строку

Функция rfind() напоминает find(), а единое отличие в том, что она возвращает максимальный индекс. В обоих случаях же вернется -1, если подстрока не была найдена.

В следующем примере есть строка «Добро пожаловать!». Попробуем найти в ней символ «о» с помощью методов find() и rfind().

Копировать Скопировано Use a different Browser


>>> string = "Добро пожаловать"
>>> print("Поиск 'о' методом find:", string.find("о"))
Поиск 'о' методом find: 1
>>> print("Поиск 'о' методом rfind:", string.rfind("о"))
Поиск 'о' методом rfind: 11

Вывод показывает, что find() возвращает индекс первого совпадения подстроки, а rfind() — последнего совпадения.

Второй способ поиска — index()

Метод index() помогает найти положение данной подстроки по аналогии с find(). Единственное отличие в том, что index() бросит исключение в том случае, если подстрока не будет найдена, а find() просто вернет -1.

Вот рабочий пример, показывающий разницу в поведении index() и find():

Копировать Скопировано Use a different Browser


>>> string = "Добро пожаловать"
>>> print("Поиск 'о' методом find:", string.find("о"))
Поиск 'о' методом find: 1
>>> print("Поиск 'о' методом index:", string.index("о"))
Поиск 'о' методом index: 1

В обоих случаях возвращается одна и та же позиция. А теперь попробуем с подстрокой, которой нет в строке:

Копировать Скопировано Use a different Browser


>>> string = "Добро пожаловать"
>>> print("Поиск 'г' методом find:", string.find("г"))
Поиск 'г' методом find: 1
>>> print("Поиск 'г' методом index:", string.index("г"))
Traceback (most recent call last):
File "pyshell#21", line 1, in module
print("Поиск 'г' методом index:", string.index("г"))
ValueError: substring not found

В этом примере мы пытались найти подстроку «г». Ее там нет, поэтому find() возвращает -1, а index() бросает исключение.

Поиск всех вхождений символа в строку

Чтобы найти общее количество совпадений подстроки в строке можно использовать ту же функцию find(). Пройдемся циклом while по строке и будем задействовать параметр start из метода find().

Изначально переменная start будет равна -1, что бы прибавлять 1 у каждому новому поиску и начать с 0. Внутри цикла проверяем, присутствует ли подстрока в строке с помощью метода find.

Если вернувшееся значение не равно -1, то обновляем значением count.

Вот рабочий пример:

Копировать Скопировано Use a different Browser


my_string = "Добро пожаловать"
start = -1
count = 0

while True:
start = my_string.find("о", start+1)
if start == -1:
break
count += 1

print("Количество вхождений символа в строку: ", count )

Количество вхождений символа в строку:  4

Выводы

  • Метод find() помогает найти индекс первого совпадения подстроки в данной строке. Возвращает -1, если подстрока не была найдена.
  • В метод передаются три параметра: подстрока, которую нужно найти, start со значением по умолчанию равным 0 и end со значением по умолчанию равным длине строки.
  • Можно искать подстроку в данной строке, задав начальное положение, с которого следует начинать поиск.
  • С помощью параметров start и end можно ограничить зону поиска, чтобы не выполнять его по всей строке.
  • Функция rfind() повторяет возможности find(), но возвращает максимальный индекс (то есть, место последнего совпадения). В обоих случаях возвращается -1, если подстрока не была найдена.
  • index() — еще одна функция, которая возвращает положение подстроки. Отличие лишь в том, что index() бросает исключение, если подстрока не была найдена, а find() возвращает -1.
  • find() можно использовать в том числе и для поиска общего числа совпадений подстроки.

Метод Python String find()

Сохранить статью

  • Уровень сложности: Базовый
  • Последнее обновление: 31 января 2023 г.

  • Читать
  • Обсудить
  • Улучшить статью

    Сохранить статью

    Метод Python String find() возвращает наименьший индекс или первое вхождение подстроки, если она найдена в данной строке. Если он не найден, то возвращается -1.

    Синтаксис: str_obj.find(sub, start, end)

    Параметры:  

    • sub: Подстрока, которую необходимо найти в заданной строке.
    • начало (необязательно): Начальная позиция, в которой необходимо проверить подстроку в строке.
    • конец (необязательно): Конечная позиция — это индекс последнего значения для указанного диапазона. Исключается при проверке.

    Возврат:  Возвращает наименьший индекс подстроки, если она найдена в заданной строке.

    Если он не найден, он возвращает -1.

    Python String find() method Example

    Python3

    word = 'geeks for geeks'

    print (word.find( 'for' ))

    Выход:

     6 

    Временная сложность: O(n)

    Вспомогательный пробел: O(1)

    Примечание:

    1. Если начальный и конечный индексы не указаны, то по умолчанию в качестве начального и конечного индексов принимается 0 и длина-1, где конечные индексы не включены в наш поиск.
    2. Метод find() аналогичен index(). Единственное отличие заключается в том, что find() возвращает -1, если искомая строка не найдена, и index() в этом случае выдает исключение.

    Пример 1: find() без начального и конечного аргумента

    Python3

    Слово = 'Ванхики для гик

    РЕЗУЛЬТАТ =

    =

    =

    . ( "Substring 'geeks' found at index:" , result)

     

    result = word.find( 'for' )

    Печать

    ( "Подстроение" для "найдено в индексе:" , результат)

    IF Word. find ( 'Pawan' )! = - 1 :

         print ( "Contains given substring " )

    else :

         print ( "Не содержит заданной подстроки" )

    Вывод:

     Подстрока 'geeks' найдена по индексу: 0
    Подстрока for найдена по индексу: 6
    Не содержит заданной подстроки 

    Временная сложность: O(n)

    Вспомогательный пробел: O(1)

    Пример 2: find() С начальным и конечным аргументами

    В этом примере мы указали начальный и конечный аргументы метода Python String find(). Так что данная подстрока ищется в указанной части исходной строки.

    Python3

    word = 'geeks for geeks'

     

    print (word.find( 'ge' , 2 ))

    Печать (Word.find ( 'Fanting' , 2 )

    9003

    . , 4 , 10 ))

     

    print (word.find( 'for ' , 4 , 11

    ))

    Выход:

     10
    -1
    -1
    6 

    Объяснение:

    • В первом операторе вывод равен 10, так как задано начальное значение, равное 2, поэтому подстрока проверяется по второму индексу, который называется «eks for geeks».
    • Во втором операторе начальное значение задано как 2, а подстрока задана как «выродки», поэтому индексная позиция «выродки» равна 10, но из-за того, что последнее значение исключается, будет найдено только «выродок», который не совпадает с исходной строкой, поэтому вывод равен -1.
    • В третьем операторе начальное значение = 4, конечное значение = 10 и задана подстрока = ‘g’, позиция индекса из 4 будет проверена для данной подстроки, которая находится в позиции 10, которая исключается, поскольку она является конечным индексом.
    • В четвертом операторе задано начальное значение = 4, конечное значение = 11 и подстрока = ‘for’, позиция индекса с 4 по 11 будет проверена для данной подстроки, и указанная подстрока присутствует в индексе 6, так получается вывод.

    Статьи по теме

    Как проверить, содержит ли строка подстроку в Java

    1 ответ на этот вопрос.

    +2 голоса

    Связанные вопросы в Java

    Чтобы проверить, является ли файл . .. ПОДРОБНЕЕ

    ответил 29 декабря 2020 г. на Яве к Раджив • 8 910 баллов • 23 876 просмотров

    • ява
    • файл-io
    • ио
    • файловых выходов

    Используйте строки кода, указанные ниже: — Строка … ПОДРОБНЕЕ

    ответил 9 февраля 2022 г. на Яве к Сохам • 9,700 баллов • 1269 просмотров

    • ява
    • json
    • Java-программирование
    • java-строк
    • селен-java
    • селен-вебдрайвер
    • селен

    Arrays.asList(вашмассив).содержит(вашезначение) Предупреждение: это не работает для массивов из … ПОДРОБНЕЕ

    ответил 21 декабря 2020 г. на Яве к Гитика • 65 910 баллов • 485 просмотров

    • ява
    • Java-массив
    • Java-программирование

    Проверить, является ли строка числовой публичный класс . .. ПОДРОБНЕЕ

    ответил 29 декабря 2020 г. на Яве к Карлос • 576 просмотров

    • ява
    • java-строк
    • Java-числовой модуль
    • коллекция-java

    Мы можем использовать Apache Commons IO. Это … ПОДРОБНЕЕ

    ответил 20 июля 2018 г. на Яве к Сушмита • 6 900 баллов • 672 просмотра

    • ява
    • java-строк
    • java-файлов
    • Java-программирование

    пытаться { окончательный путь … ПОДРОБНЕЕ

    ответил 6 сентября 2018 г. на Яве к Сушмита • 6 900 баллов • 772 просмотра

    • ява
    • java-файлов
    • Java-программирование
    • java-строк

    Да; Спецификация языка Java пишет: В Java… ПОДРОБНЕЕ

    ответил 10 мая 2018 г. на Яве к Ришаб • 3620 баллов • 652 просмотра

    • ява
    • Java-массив
    • Java-программирование
    • массив
    • объектов-в-java
    • java-методы

    Вы можете использовать метод split(). str = «Здравствуйте… ПОДРОБНЕЕ

    ответил 16 мая 2018 г. на Яве к шарт • 3 350 баллов • 952 просмотра

    • ява
    • java-строк
    • тип данных
    • java-методы
    • Java-программирование

    Привет@ахтар, Вы можете выполнить следующие шаги, чтобы установить … ПОДРОБНЕЕ

    ответил 7 июля 2020 г. на Яве к доктор медицины • 95 460 баллов • 5313 просмотров

    • ява
    • Дженкинс
    • DevOps-инструменты
    • Девопс
    • Java-программирование
    • установка Java

    Привет@ахтар, Вы можете использовать класс StringBuffer. Он предоставляет … ПОДРОБНЕЕ

    ответил 30 декабря 2020 г. на Яве к доктор медицины • 95 460 баллов • 304 просмотра

    • ява
    • Java-программирование
    • java-строк
    • Когда использовать promise. all()? 12 декабря 2022 г.
    • Как найти простые множители целого числа в JavaScript? 12 декабря 2022 г.
    • Создание PDF-файла из HTML в div с использованием Javascript 9 декабря 2022 г.
    • Перебор массива в JavaScript 9 декабря 2022 г.
    • Как получить текущее время только в JavaScript 9 декабря 2022 г.
    • Все категории
    • ЧатGPT (6)
    • Апач Кафка (84)
    • Апач Спарк (596)
    • Лазурный (145)
    • Большие данные Hadoop (1907)
    • Блокчейн (1673)
    • С# (141)
    • С++ (271)
    • Консультирование по вопросам карьеры (1060)
    • Облачные вычисления (3469)
    • Кибербезопасность и этичный взлом (147)
    • Аналитика данных (1266)
    • База данных (855)
    • Наука о данных (76)
    • DevOps и Agile (3590)
    • Цифровой маркетинг (111)
    • События и актуальные темы (28)
    • IoT (Интернет вещей) (387)
    • Джава (1247)
    • Котлин (8)
    • Администрирование Linux (389)
    • Машинное обучение (337)
    • Микростратегия (6)
    • PMP (423)
    • Power BI (516)
    • Питон (3193)
    • РПА (650)
    • SalesForce (92)
    • Селен (1569)
    • Тестирование программного обеспечения (56)
    • Таблица (608)
    • Таленд (73)
    • ТипСкрипт (124)
    • Веб-разработка (3002)
    • Спросите нас о чем угодно! (66)
    • Другие (2032)
    • Мобильная разработка (290)

    Подпишитесь на нашу рассылку новостей и получайте персональные рекомендации.

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *