Разбить строку по регулярке, сохранив делитель в java/kotlin
Если очень кратко, то я хочу конвертировать управляющие символы ANSI (цвета) в html, который потом можно было бы использовать в TextView. Однако, для этого нужно разбить строку на токены и собрать html код. С этим у меня и возникли проблемы
text.split(Pattern.compile("(\\u001B\\[[\\dm;]+)")).forEach < token ->Log.i("token", token) >
Есть сей код на котлине, но но удаляет цвета из массива. Актуальный результат: [«red»] Ожидаемый результат: [«\u001B[38;5;203m», «red», «\u001B[m»] На php это выглядело бы так:
$string = "\e[38;5;203m" . "red" . "\e[m"; var_dump(preg_split("/(\e\[[\dm;]+)/", $string, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE));
Отслеживать
задан 27 авг 2018 в 15:08
305 1 1 золотой знак 2 2 серебряных знака 12 12 бронзовых знаков
Вы лучше добавьте текст + ожидаемый результат в вопрос. Такая у вас строка: val s = «\\e[38;5;203mred\\e[m» ?
27 авг 2018 в 21:23
@WiktorStribiżew обновил
28 авг 2018 в 9:15
я хочу конвертировать управляющие символы ANSI (цвета) в html — вот это нужно проиллюстрировать. Мне кажется, что нет нужды разбивать текст на части, нужно сразу найти и заменить.
28 авг 2018 в 9:17
@WiktorStribiżew Каким же образом? Проблема в том, что цвет может быть не один и «\e[m» сбрасывает цвета
28 авг 2018 в 9:23
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Код для Kotlin, который разбивает строку на части с помощью целого регулярного выражения:
private fun splitKeepDelims(s: String, rx: Regex, keep_empty: Boolean = true) : MutableList < var res = mutableListOf() // Объявляем изменяемый список var start = 0 // Задаём переменную для начала подстроки rx.findAll(s).forEach < // Ищем все совпадения val substr_before = s.substring(start, it.range.first()) // Подстрока до начала совпадения if (substr_before.length >0 || keep_empty) < res.add(substr_before) // Добавляем подстроку до начала совпадения >res.add(it.value) // Добавляем совпадение start = it.range.last()+1 // Обновляем начало следующей подстроки до совпадения > if ( start != s.length ) res.add(s.substring(start)) // Если есть текст после последнего совпадения, добавляем return res >
val s = "\u001B[38;5;203mred\u001B[m\u001B[38;5;203mgreen\u001B[m" val rx = """\u001B\[[\dm;]+""".toRegex() var res = splitKeepDelims(s, rx, false) println(res)
[[38;5;203m, red, [m, [38;5;203m, green, [m]
Как развернуть строку в kotlin
Для вывода информации на консоль в Kotlin есть две встроенные функции:
print() println()
Обе эти функции принимают некоторый объект, который надо вывести на консоль, обычно это строка. Различие между ними состоит в том, что функция println() при выводе на консоль добавляет перевод на новую строку:
fun main()
Причем функция println() необязательно должна принимать некоторое значения. Так, здесь применяется пустой вызов функции, который просто перевод консольный вывод на новую строку:
println()
Консольный вывод программы:
Hello Kotlin on Metanit.com Kotlin is a fun
Ввод с консоли
Для ввода с консоли применяется встроенная функция readLine() . Она возвращает введенную строку. Стоит отметить, что результат этой функции всегда представляет объект типа String . Соответственно введеную строку мы можем передать в переменную типа String :
fun main()
Здесь сначала выводится приглашение к вводу данных. Далее введенное значение передается в переменную name . Результат работы программы:
Введите имя: Евгений Ваше имя: Евгений
Подобным образом можно вводить разные данные:
fun main()
Пример работы программы:
Введите имя: Евгений Введите email: metanit22@mail.ru Введите адрес: ул. Кленов, д.31, кв. 20 Ваше имя: Евгений Ваш email: metanit22@mail.ru Ваш адрес: ул. Кленов, д.31, кв. 20
Как развернуть строку в Kotlin
Работа с текстовыми данными — одна из ключевых задач при разработке программного обеспечения. В языке программирования Kotlin имеется множество способов для разворота строки, то есть изменения порядка символов внутри нее.
Простейший способ развернуть строку в Kotlin — использование функции reversed(). Она применяется непосредственно к строке и возвращает ее развернутую версию. Такой подход позволяет легко и быстро получить результат, но не изменяет исходную строку.
Если же вам необходимо изменить исходную строку, можно воспользоваться функцией toCharArray(). Она разбивает строку на массив символов, после чего можно использовать функцию reverse() для его разворота. Затем массив символов можно объединить в одну строку при помощи функции concatToString().
Кроме того, в Kotlin имеется возможность развернуть строку в одну строку кода, воспользовавшись функцией reverse(). Этот метод можно вызывать у строкового значения, изменяя его напрямую. Такой подход позволяет выполнить разворот строки в самом коротком виде, но может быть несколько менее понятным для других программистов.
Как развернуть строку в Kotlin: способы и примеры
В языке программирования Kotlin есть несколько способов развернуть строку. Развернутая строка может быть полезна при работе с алгоритмами, поиске подстроки или просто для изменения порядка символов в строке. Рассмотрим несколько простых способов с примерами кода.
1. Использование функции reversed()
Одним из самых простых способов развернуть строку в Kotlin является использование функции reversed(). Эта функция разворачивает символы строки в обратном порядке.
fun main()
val str = "Пример строки"
val reversedStr = str.reversed()
println(reversedStr)
>
В результате выполнения этого кода будет выведена следующая строка: «якортс ремирП».
2. Использование функции reversed() с преобразованием в массив символов
Еще одним способом развернуть строку является использование функции reversed() вместе с преобразованием строки в массив символов и обратным преобразованием обратно в строку.
fun main()
val str = "Пример строки"
val reversedStr = str.toCharArray().reversed().joinToString(separator = "")
println(reversedStr)
>
В результате выполнения этого кода также будет выведена строка «якортс ремирП».
3. Использование цикла
Можно также использовать обычный цикл для разворота строки. В этом случае необходимо создать пустую строку и итеративно добавлять символы из исходной строки в обратном порядке.
fun main()
val str = "Пример строки"
var reversedStr = ""
for (i in str.length - 1 downTo 0)
reversedStr += str[i]
>
println(reversedStr)
>
Результат выполнения данного кода также будет строка «якортс ремирП».
4. Использование функции StringBuilder()
Класс StringBuilder также предоставляет возможность развернуть строку. Для этого необходимо создать объект StringBuilder, добавить символы из исходной строки в обратном порядке с помощью метода append(), а затем преобразовать объект StringBuilder в строку с помощью метода toString().
fun main()
val str = "Пример строки"
val reversedStr = StringBuilder().append(str).reverse().toString()
println(reversedStr)
>
Результатом выполнения этого кода также будет строка «якортс ремирП».
Таким образом, в языке программирования Kotlin есть несколько простых способов развернуть строку. Выбор конкретного способа зависит от ваших предпочтений и требований проекта. Попробуйте использовать приведенные выше примеры и выберите то, что лучше всего подходит для вашего случая.
Развернуть строку с помощью метода reverse()
В Kotlin существует несколько способов развернуть строку. Один из самых простых способов — использовать метод reverse(), доступный для типа данных StringBuilder.
Для начала, создайте объект StringBuilder и инициализируйте его строкой, которую вы хотите развернуть:
val str = "Привет, мир!"val reverseStr = StringBuilder(str).reverse().toString()
В приведенном выше коде строка str сначала преобразуется в объект StringBuilder. Затем вызывается метод reverse(), который разворачивает строку. Наконец, метод toString() преобразует объект StringBuilder обратно в строку.
Теперь переменная reverseStr содержит развернутую строку. Вы можете использовать ее по своему усмотрению.
Если вам необходимо развернуть строку без использования StringBuilder, вы также можете воспользоваться стандартной библиотечной функцией reversed():
val str = "Привет, мир!"val reverseStr = str.reversed()
В этом случае метод reversed() вызывается непосредственно для строки. Он возвращает развернутую строку.
Обратите внимание, что методы reverse() и reversed() работают только с немутабельными строками (immutable strings). Если вам нужно развернуть мутабельную строку (mutable string), вам следует использовать первый подход с StringBuilder.
В конечном итоге, оба этих метода предоставляют простой и удобный способ развернуть строку в Kotlin.
Развернуть строку с использованием цикла
Одним из простых способов развернуть строку в Kotlin является использование цикла. Цикл позволяет итерироваться по каждому символу в строке и добавлять его в новую строку в обратном порядке.
Вот пример кода, демонстрирующий, как развернуть строку с использованием цикла:
fun reverseString(str: String): String
var reverse = ""
for (i in str.length - 1 downTo 0)
reverse += str[i]
>
return reverse
>
fun main()
val str = "Пример строки"
val reversedStr = reverseString(str)
println("Развернутая строка: $reversedStr")
>
В данном примере функция reverseString принимает в качестве аргумента исходную строку str и возвращает развернутую строку. Цикл for итерируется по каждому символу в строке, начиная с последнего символа и заканчивая первым. Затем каждый символ добавляется в новую строку reverse .
В функции main создается исходная строка str и вызывается функция reverseString для развертывания строки. Полученная развернутая строка затем выводится на экран с помощью функции println .
При запуске данного кода будет выведено:
Развернутая строка: янгортс еримарП
Таким образом, использование цикла позволяет легко развернуть строку в Kotlin, и это один из простых способов достичь желаемого результата.
Вопрос-ответ
Что такое разворот строки в Kotlin?
Разворот строки в Kotlin — это процесс изменения порядка символов в строке на противоположный.
Какие существуют способы разворота строки в Kotlin?
В Kotlin можно развернуть строку с помощью функции `reversed()`, использования цикла `for`, итератора `listIterator()` или через рекурсию.
Как использовать функцию `reversed()` для разворота строки в Kotlin?
Для того чтобы развернуть строку с помощью функции `reversed()`, нужно просто вызвать эту функцию на строковом объекте и сохранить результат в переменную. Например, `val reversedString = «Hello».reversed()`.
Split a string on whitespace in Kotlin
This article explores different ways to split a string on whitespace in Kotlin. The whitespace characters consist of ‘ ‘ , ‘\t’ , ‘\n’ , ‘\r’ , ‘f’ , etc.
We can use the split() function to split a char sequence around matches of a regular expression. To split on whitespace characters, we can use the regex ‘\s’ that denotes a whitespace character.
val str = «A B»
val words = str . split ( «\\s» . toRegex ( ) ) . toTypedArray ( )
println ( words . contentToString ( ) ) // [A, B]
Note that we have called the toTypedArray() function, since the split() function returns a list. Here’s an equivalent version using POSIX character class \p .