Visual studio убрать пробелы в строке
Каков самый быстрый способ заменить лишние пробелы на одно пустое пространство?
например.
ОТВЕТЫ
Ответ 1
Самый быстрый способ? Выполните итерацию по строке и создайте вторую копию в символе StringBuilder , копируя только один пробел для каждой группы пробелов.
Более простые варианты Replace создадут множество дополнительных строк (или тратят время на создание регулярного выражения DFA).
Изменить с результатами сравнения:
Как и ожидалось, Regex ужасно неэффективен для чего-то такого простого.
Ответ 2
Вы можете использовать регулярное выражение:
Ответ 3
Немного поздно, но я сделал некоторый бенчмаркинг, чтобы получить самый быстрый способ удалить лишние пробелы. Если есть более быстрые ответы, я хотел бы добавить их.
Результаты:
- NormalizeWhiteSpaceForLoop: 156 мс (by Me - из моего ответа об удалении всех пробелов)
- NormalizeWhiteSpace: 267 мс (от Alex K.)
- RegexCompiled: 1950 мс (от SLaks)
- Regex: 2261 мс (от SLaks)
Код:
Тесты:
Ответ 4
Я использую ниже методы - они обрабатывают все пробельные символы не только пробелы, обрезают как ведущие, так и завершающие пробелы, удалять дополнительные, а все пробелы заменены на пробел char (поэтому у нас есть единый разделитель пространства). И эти методы быстро.
Ответ 5
Ответ 6
Это решение работает с пробелами, вкладками и новой строкой. Если вы хотите просто пробелы, замените '\ s' на '..
Ответ 7
Мне понадобился один из них для больших строк и придумал подпрограмму ниже.
Любое последовательное белое пространство (включая табуляции, новые строки) заменяется на все, что находится в normalizeTo . Верхнее/конечное белое пространство удаляется.
Он примерно в 8 раз быстрее, чем RegEx с моими строками 5k- > 5mil char.
Ответ 8
Ответ 9
Я попытался использовать StringBuilder для:
- удалить дополнительные пробельные подстроки
- принять символы из цикла по исходной строке, так как Blindy предлагает
Здесь наилучший баланс производительности и удобочитаемости, который я нашел (используя 100 000 циклов итерации). Иногда это быстрее, чем менее читаемая версия, на 5% медленнее. На моей небольшой тестовой строке регулярное выражение занимает 4.24x столько времени.
Ответ 10
Это не быстро, но если простота помогает, это работает:
Ответ 11
Ответ 12
В этом вопросе не совсем ясно, какие требования заслуживают.
- Вам нужен одиночный символ верхнего или конечного пробела?
- Когда вы заменяете все пробелы одним символом, вы хотите, чтобы этот символ был последовательным? (т.е. многие из этих решений заменили бы \t\t на\t и '' на '..
Это очень эффективная версия, которая заменяет все пробелы одним пространством и удаляет любое предшествующее и конечное пустое пространство перед циклом for.
Ответ 13
Эта часть кода работает хорошо. Я не измеряю производительность.
Ответ 14
вы можете использовать indexOf для первого захвата, где начинаются последовательности пробелов, а затем использовать метод replace, чтобы изменить пробел на "". Оттуда вы можете использовать индекс, который вы захватили, и поместить один символ пробела в это место.
Ответ 15
Это смешно, но на моем компьютере метод ниже так же быстро, как подход Сергея Поваляева StringBulder - (
282ms за 1000 повторений, строки 10k src). Не уверен в использовании памяти.
Очевидно, что это хорошо работает с любыми символами - не просто пробелами.
Хотя это не то, о чем попросил ОП, но если вам действительно нужно заменить определенные последовательные символы в строке только одним экземпляром, вы можете использовать этот относительно эффективный метод:
Ответ 16
Ответ 17
Я только что взбесил это, но еще не проверял. Но я чувствовал, что это изящно и позволяет избежать регулярного выражения:
Ответ 18
Я что-то упустил? Я придумал это:
Я знаю, что создаю вторую строку здесь, чтобы вернуть ее, а также создать массив splitParts. Просто подумал, что это довольно прямолинейно. Возможно, я не учитываю некоторые потенциальные сценарии.
Ответ 19
Я знаю, что это действительно старый, но самый простой способ сглаживания пробелов (заменить любой повторяющийся символ пробела одним символом пробела):
Ответ 20
Ответ 21
Для тех, кто просто хочет скопировать и продолжить:
Ответ 22
Для моего случая использования мне нужно было нормализовать все белые пробелы (WS: < space , tab , cr lf >) со следующими условиями:
- WS может прийти в любой комбинации
- Заменить последовательность WS на наиболее значимый WS
- tab необходимо сохранить в некоторых случаях (например, файл, разделенный табуляцией, и в этом случае необходимо также сохранить повторные вкладки). Но в большинстве случаев они должны быть преобразованы в пробелы.
Итак, вот пример ввода и ожидаемый вывод (Отказ от ответственности: мой код тестируется только для этого примера)
для преобразования в
Ответ 23
Я не знаю, если это самый быстрый способ, но я использую это, и это работает для меня:
Ответ 24
Нет необходимости в сложном коде! Вот простой код, который удалит любые дубликаты:
При разборе предложения на отдельные слова может оказаться, что в начале или в конце некоторых слов стоят пробелы. В этом случае можно воспользоваться методами сокращения в классе System.String, чтобы удалить любое количество пробелов или других символов из указанной позиции в строке. В таблице ниже описаны доступны методы сокращения.
Имя метода | Использовать |
---|---|
String.Trim | Удаление пробелов или знаков, указанных в массиве знаков, из начала и конца строки. |
String.TrimEnd | Удаление символов, указанных в массиве символов, в конце строки. |
String.TrimStart | Удаление символов, указанных в массиве символов, в начале строки. |
String.Remove | Удаление указанного количества символов в указанной позиции индекса в строке. |
Простой способ удалить пробелы с обоих концов строки — метод String.Trim, использование которого показано в следующем примере.
Кроме того, можно удалить символы, указанные в массиве знаков, из начала и конца строки. В следующем примере удаляются символы пробелов, точки и звездочки.
TrimEnd
Метод String.TrimEnd удаляет символы в конце строки, создавая новый строковый объект. Для указания символов, которые следует удалять, в этот метод передается массив символов. Порядок элементов в массиве символов не влияет на выполнение операции сокращения. В случае обнаружения символа, который отсутствует в массиве, операция останавливается.
Ниже приведен пример удаления последних букв строки с помощью метода TrimEnd. В этом примере положение символов 'r' и 'W' изменено для иллюстрации того, что порядок символов в массиве не имеет значения. Обратите внимание, что этот код удаляет последнее слово MyString и часть первого.
Этот код выводит на консоль значение He .
Ниже приведен пример удаления последнего слова строки с помощью метода TrimEnd. В этом коде после слова Hello следует запятая, а поскольку запятая не указана в массиве символов для сокращения, то выполнение операции прекращается на запятой.
Этот код выводит на консоль значение Hello, .
TrimStart
Метод String.TrimStart аналогичен методу String.TrimEnd за исключением того, что он создает новую строку путем удаления знаков в начале существующего строкового объекта. Для указания символов, которые следует удалять, в метод TrimStart передается массив символов. Как и в случае с методом TrimEnd, порядок элементов в массиве символов не влияет на выполнение операции сокращения. В случае обнаружения символа, который отсутствует в массиве, операция останавливается.
В следующем примере удаляется первое слово в строке. В этом примере положение символов 'l' и 'H' изменено для иллюстрации того, что порядок символов в массиве не имеет значения.
Этот код выводит на консоль значение World! .
Удалить
Метод String.Remove удаляет указанное количество знаков, начиная с указанного места в существующей строке. Этот метод подразумевает, что отсчет индекса начинается с нуля.
В следующем примере из строки удаляется десять символов, начиная с пятой позиции отсчитываемого от нуля индекса строки.
Удаление пробелов при чтении CSV
Добрый вечер. Помогите люди добрые , не понимаю в чем проблема. Есть у меня cvs файл , в нем 4.
Удаление конечных пробелов в значении текстового поля
Присваиваю сессии значение TextBox-a, но в результате получаю значение + пробел. И дальше его я не.
Удаление пробелов
Добрый день! Есть вот такая программка. Уже готова, но почему то не работает ( вот архив Там.
Решение
странно но у меня этот метод не видит пробелы соответственно не заменяет их ни на что, могут ил пробелы в строке в каком нибудь виде типа \r \n ?
странно в поле объекта моего класса работает норм а с переменной стринг не работает
а не все нормально ошибочка) забыл что надо еще и присваивать новое значение)
да я знаю про все эти методы я просто забыл что обьект точка метод не равно обьект=обьект точка метод.
Решение
Удаляет лишние пробелы и переносы строк (заменяя на 1 пробел):По аналогии можно сделать замену на произвольный символ. У меня на методы Replace, Empty, Trim ругается, из какой это библиотеки? Подскажите, пожалуйста, регулярку, удаляющую все пробельные символы в конце строки Подскажите, пожалуйста, регулярку, удаляющую все пробельные символы в конце строки то же самое чт опостом выше только метод TrimEnd() видимо.
Удаление пробелов из строки
Здравствуйте помогите пожалуйста, у создал поисковик всё хорошо работает но хочу избавится от.
Удаление пробелов и знаков препинания
нужно удалить из текста который будет введен в программу лишние пробелы и знаки препинания.
Удаление пробелов в строковом массиве
Проблема: вводится строка содержащая числа и между числами случайное кол-во пробелов, подскажите.
Удаление повторяющихся пробелов из строки
Вот вопрос : у меня есть строка какая-та и в этой строке есть много пробелов которые каждый что-то.
Репутация: 1
Всего: 2
Как АВТОМАТИЗИРОВАТЬ удаления пробелов при удалении строки в редакторе кода Visual Studio?
т.е. если мы, например, удаляем строку, нажимая delete, то следующая строка начинается не с текста, а с пробелов - оставшиеся отступы.
Resharper, кажется, это делает.
С помощью макросов?
Репутация: нет
Всего: 7
Меня зовут Себастьян Парейра, торговец чёрным деревом.
Репутация: 22
Всего: 118
Что-то не поняли? -> Напейтесь до зеленых человечков. эта сверхцивилизация Вам поможет.
Репутация: нет
Всего: 7
jonie, Тока не понимаю чем Home->Backspace хуже? Ничего не затирает и не менее оперативно, поскольку Home и Backspace рядом находятся (я уж молчу, что на буках они вообще ближайшие соседи).
Короче, я за мой вариант
Репутация: 22
Всего: 118
Что-то не поняли? -> Напейтесь до зеленых человечков. эта сверхцивилизация Вам поможет.
Репутация: 1
Всего: 2
Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
Репутация: 31
Всего: 141
Возможно это потому, что вопрос сформулирован непонятно? Напиши что ты хочешь делать: удалять пустые строки(все или только в выделенном фрагменте), форматировать документ или что-то еще.
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит
Репутация: 1
Всего: 2
Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
Репутация: 31
Всего: 141
Злой доктор Щасзаболит
Репутация: 1
Всего: 2
можно tutorial как его подцепить?
Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
Репутация: 31
Всего: 141
Цитата |
1. Выбери меню Сервис->Макросы->Интегрированная среда разработки макросов. 2. В открывшейся среде разработки макросов, в обозревателе проектов выбери проект MyMacros (или создай новый проект), щелкни по нему дважды и в раскрывшемся списке выбери главный модуль. 3. Щелкни дважды по главному модулю, он и откроется 4. Вставь код в модуль и сохрани проект. 5. В основной среде выбери меню Сервис->Макросы->Обозреватель макросов. Откроется обозреватель макросов(это инструментальное окно, обычно открывается справа), там найдешь. Так же он будет доступен среди команд студии и ему можно будет назначить "горячие клавиши". |
Злой доктор Щасзаболит
Репутация: 1
Всего: 2
ну дык знаю же что есть такая вещь крутая
скрипт работает, только не допер, как сделать так чтобы whitespaces удалялись только справа, а то при удалении символы удаляются и слева, т.е. каретка перемещается влево до упора.
и если есть символы правый символ всё-таки удалялся
Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
Репутация: 31
Всего: 141
Каретку я намеренно перемещаю в начало строки, не нравится - удали 11-ю строку.
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит
Репутация: 1
Всего: 2
Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
Репутация: 31
Всего: 141
Злой доктор Щасзаболит
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.
[ Время генерации скрипта: 0.1543 ] [ Использовано запросов: 21 ] [ GZIP включён ]
каков самый простой и эффективный способ удаления пробелов из строки в C?
самый простой и эффективный обычно не идут вместе.
вот возможное решение (непроверено):
вот очень компактная, но совершенно правильная версия:
и здесь, просто для моего развлечения, есть версии с кодовым гольфом, которые не совсем корректны и расстраивают комментаторов.
Если вы можете рисковать неопределенным поведением и никогда не иметь пустых строк, вы можете избавиться от тела:
Черт, если под пробелом вы подразумеваете только пробел:
не используйте это в производстве:)
вещи для рассмотрения:
- вы хотите сделать копию строки с удаленными пробелами. Изменение переданной строки-плохая практика, это может быть строковый литерал. Кроме того, есть иногда преимущества обработки строк как неизменяемые объекты.
- нельзя предположить, что исходная строка не пуста. Он может содержать только один символ окончания null.
- буфер назначения может содержать любой неинициализированный мусор при вызове функции. Проверка его на нулевое завершение не имеет никакого смысла.
- исходный код документации должно быть указано, что буфер должен быть достаточно большим, чтобы содержать обрезанная веревка. Самый простой способ сделать это-сделать его таким же большим, как необрезанная строка.
- буфер назначения должен содержать строку с нулевым завершением без пробелов, когда функция выполнена.
- подумайте, хотите ли вы удалить все символы пробела или просто пробелы ' ' .
- программирование на С-это не соревнование за то, кто может втиснуть как можно больше операторов на одной линии. Это скорее наоборот, хорошая программа C содержит читаемый код (всегда одно-самое важное качество) без ущерба для эффективности программы (несколько важно).
- по этой причине вы не получаете бонусных очков за скрытие вставки нулевого завершения строки назначения, позволяя ей быть частью кода копирования. Вместо этого сделайте вставку null termination явной, чтобы показать, что вам не просто удалось получить ее случайно.
что бы я сделал:
В этом коде исходная строка "str_untrimmed" остается нетронутой, что гарантируется правильной корректностью const. Он не аварийно завершается, если исходная строка содержит только нулевое завершение. Он всегда null завершает строку назначения.
выделение памяти остается вызывающему абоненту. Алгоритм должен сосредоточиться только на своей работе. Он удаляет все пробелы.
в коде нет тонких трюков. Он не пытается втиснуть как можно больше операторов на одной линии. Это будет очень плохой кандидат на IOCCC. Тем не менее, он даст почти тот же машинный код, что и более неясные однострочные версии.
при копировании чего-то вы можете немного оптимизировать, объявив оба указателя как restrict , который является контрактом между программистом и компилятором, где программист гарантирует, что назначение и источник не являются одним и тем же адресом (или, скорее, что данные, на которые они указывают, доступны только через это указатель, а не через какой-то другой указатель). Это позволяет более эффективно оптимизировать, так как компилятор может копировать прямо из источника в место назначения без временной памяти между ними.
В C вы можете заменить некоторые строки на месте, например строку, возвращаемую strdup ():
другие строки доступны только для чтения, например, те, которые объявлены в коде. Вам нужно будет скопировать их во вновь выделенную область памяти и заполнить копию, пропустив пробелы:
Читайте также: