Автоматическая замена кавычек на «ёлочки» на VB.net

Автоматическая замена кавычек на «ёлочки» на VB.net

Появилась задача - как заменить кавычки на ёлочки, для более красивого отображения текста? Для начала определим алгоритм по которому будем заменять. Я выбрал достаточно простой: ищем кавычку, заменяем ее на левую ёлочку("«"), далее ищем следующую кавычку и закрываем ёлочки "»". Самый легкий способ это написать цикл, пробегаться по символам и искать кавычки. Но я решил написать иначе, без цикла. Нет, не через регулярные выражения. Но алгоритм будет работать по моему мнению не хуже. Я буду использовать конструкцию "GoTo". Да-да, то что многие ненавидят и обсуждают как плохой тон программирования. Я считаю - зря, иногда можно использовать.

Сам алгорим поиска и замены кавычек:

  • Определяем метку - на какую кавычку будет заменять(открывающую или закрывающую)
  • Ищем есть ли вхождение кавычки(через "InStr")
  • Если есть, заменяем найденную кавычку на елочку, в зависимости от метки
  • Меняем метку и возвращаемся обратно к поиску кавычки
  • Возвращаем замененный текст
Public Function Replace_Quotes(m As String) As String
        Dim lqout As Boolean = True
        Dim s As Integer = 0
1:
        s = InStr(m, """")
        If s > 0 Then
            If lqout = True Then
                m = Mid(m, 1, s - 1) & "«" & Mid(m, s + 1, m.Length)
                lqout = False
                GoTo 1
            Else
                m = Mid(m, 1, s - 1) & "»" & Mid(m, s + 1, m.Length)
                lqout = True
                GoTo 1
            End If
        End If

        Return m
    End Function
'Использование
text=Replace_Quotes(text)

В данном случае замену производил посредством сцепления строк до кавычки, сами ёлочки и текста после кавычки. Если необходимо заменять кавычки на сайте, то можно символы заменять на "«" и "»".

Если вы не намерены использовать "GoTo", то используете "Do while", код функции ниже.

Public Function Replace_Quotes(m As String) As String
        Dim lqout As Boolean = True
        Dim s As Integer = 0
        s = InStr(m, """")
        Do While s > 0
            s = InStr(m, """")
            If s > 0 Then
                If lqout = True Then
                    m = Mid(m, 1, s - 1) & "«" & Mid(m, s + 1, m.Length)
                    lqout = False
                Else
                    m = Mid(m, 1, s - 1) & "»" & Mid(m, s + 1, m.Length)
                    lqout = True
                End If
            End If
        Loop
        Return m
    End Function
'Использование
text=Replace_Quotes(text)

Второй способ замены кавычек

Есть более простой способ заменить, всего лишь в одну строку

Public Function Replace_Quotes(m As String) As String
	m = m.Replace(" """, " «").Replace("""", "»")
	Return m
End Function

Алгоритм через Replace, минус его только в том, что если исходный текст будет например таким:
«text text ("text")», то код сработает не так как нужно.

0 Комментария прокомментировать

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

Текст *

Яндекс.Метрика