Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WinForms, .Net Framework Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Как убрать все символы ; в конце строки?  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3062
string s="vasya;;;;";

На выходе надо получить строку без ';'
17 май 19, 14:26    [21887280]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать все символы ; в конце строки?  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 26735
String.TrimEnd Method
17 май 19, 14:28    [21887285]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать все символы ; в конце строки?  [new]
stomsky
Member

Откуда: Волгоград
Сообщений: 149
Ролг Хупин,

А чем символ ";" отличается от остальных? Если вместо него будут "." стоять их надо оставить или тоже отсечь?
17 май 19, 14:28    [21887286]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать все символы ; в конце строки?  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3062
stomsky
Ролг Хупин,

А чем символ ";" отличается от остальных? Если вместо него будут "." стоять их надо оставить или тоже отсечь?


Вместо васи моежт быть в некоторых случаях, например, "Петро123;;;;;;;", но ';' - это важно.
Да, протормозил, Trim
17 май 19, 14:34    [21887296]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать все символы ; в конце строки?  [new]
fkthat
Member

Откуда:
Сообщений: 1366
Решение за два евро в час:

var str = new[] { "abc", "abcd;;;;", ";;;ab", "ab;cd;efg;;;" };

var rx = new Regex("^(.*[^;]);*$");

foreach (var s in str)
{
    Console.WriteLine($"{s} -> {rx.Match(s).Groups[1]}");
}


17 май 19, 14:47    [21887317]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать все символы ; в конце строки?  [new]
fkthat
Member

Откуда:
Сообщений: 1366
Потратил примерно 4 минуты - с тебя 14 европейских центов. Оплата на пейпал.
17 май 19, 14:50    [21887320]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать все символы ; в конце строки?  [new]
Roman Mejtes
Member

Откуда: г. Пермь
Сообщений: 3463
string[] values = "1;2;3;4;;;;4;5;6;;;;".Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
17 май 19, 14:54    [21887326]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать все символы ; в конце строки?  [new]
fkthat
Member

Откуда:
Сообщений: 1366
Roman Mejtes
string[] values = "1;2;3;4;;;;4;5;6;;;;".Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries);


Во-первых вернет массив а не строку, во-вторых вообще все точкисзапятой поудаляет.
17 май 19, 15:02    [21887345]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать все символы ; в конце строки?  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
stomsky
Ролг Хупин,

А чем символ ";" отличается от остальных? Если вместо него будут "." стоять их надо оставить или тоже отсечь?
спят на клаве на определенной клавише)). Под нос наверное)
17 май 19, 15:02    [21887350]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать все символы ; в конце строки?  [new]
fkthat
Member

Откуда:
Сообщений: 1366
Мне сдается, что речь идет о каком-то парсинге CSV-файла. Если это так, то возьми готовый CsvHelper и не страдай ерундой.
17 май 19, 15:04    [21887357]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать все символы ; в конце строки?  [new]
ЕвгенийВ
Member

Откуда: Москва
Сообщений: 4817
fkthat
Решение за два евро в час:


     new[] { "abc", "abcd;;;;", ";;;ab", "ab;cd;efg;;;" }
                    .Select(x => Regex.Replace(x, ";+$", r => string.Empty))
                    .Aggregate(Console.Out, (a, b) => { a.WriteLine(b); return a; });
17 май 19, 15:15    [21887379]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать все символы ; в конце строки?  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 26735
Что-то вас парни понесло.

Автор же написал:
Ролг Хупин
Да, ..., Trim
17 май 19, 15:23    [21887388]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать все символы ; в конце строки?  [new]
fkthat
Member

Откуда:
Сообщений: 1366
ЕвгенийВ,

Зачотно. Про риплейс мне как-то с наскоку в голову не пришло. :))

Понравилось еще использование Aggregate, хотя я сам тоже так часто конкатенацию делаю:

....Aggregate(new StringBuilder(), (b, s) => b.Append(s)).ToString();


Флюентная запись как-то изящнее смотрится, чем string.Join().
17 май 19, 15:23    [21887389]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать все символы ; в конце строки?  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 26735
String.TrimEnd Method

Removes all trailing occurrences of a set of characters specified in an array from the current String object.
17 май 19, 15:24    [21887391]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать все символы ; в конце строки?  [new]
fkthat
Member

Откуда:
Сообщений: 1366
skyANA
Что-то вас парни понесло.


Я когда давно еще работал консом у финнов, то столкнулся с их нацособенностью - они там не любят единственного решения проблемы - всегда надо предложить несколько вариантов да еще и анализ расписать со всеми адвантаджами и дравбеками. Ну вот, мы и предлагаем сразу несколько решений
17 май 19, 15:28    [21887393]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать все символы ; в конце строки?  [new]
ЕвгенийВ
Member

Откуда: Москва
Сообщений: 4817
fkthat
ЕвгенийВ,


Понравилось еще использование Aggregate, хотя я сам тоже так часто конкатенацию делаю:


 var sArr = new[] { "abc", "abcd;;;;", ";;;ab", "ab;cd;efg;;;" };
                var mArr = string.Concat(sArr);

Хотя статики не круто
17 май 19, 15:30    [21887395]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать все символы ; в конце строки?  [new]
fkthat
Member

Откуда:
Сообщений: 1366
ЕвгенийВ,

Я что-то вспоминаю, что Concat не рекомендовали, там как-то было связано с CLS-compliancy или в этом роде. Кстати, что забавно, у стрингов нет перегруженного оператора "+" - компилятор просто заменяет s1 + s2 на string.Concat(s1, s2). Я это только лет через десять разработки на сишарпе случайно узнал
17 май 19, 15:47    [21887424]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать все символы ; в конце строки?  [new]
ЕвгенийВ
Member

Откуда: Москва
Сообщений: 4817
fkthat,
Открой для себя ilspy https://github.com/icsharpcode/ILSpy/releases
17 май 19, 16:00    [21887439]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать все символы ; в конце строки?  [new]
fkthat
Member

Откуда:
Сообщений: 1366
ЕвгенийВ
fkthat,
Открой для себя ilspy https://github.com/icsharpcode/ILSpy/releases


Я что-то к телериковскому JustDecompile уже привык. В первых сезонах он еще прилично глючил, но сейчас уже давно вылизали.
17 май 19, 16:05    [21887449]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать все символы ; в конце строки?  [new]
fkthat
Member

Откуда:
Сообщений: 1366
ЕвгенийВ,

Да, кстати, Concat еще оказывается по скорости быстрее на 10-20% чем StringBuilder. Причем, даже если у билдера загодя задавать капасити, то ситуация не меняется. Ну что же, будем теперь знать и использовать
17 май 19, 16:39    [21887484]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать все символы ; в конце строки?  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3062
skyANA
Что-то вас парни понесло.

Автор же написал:
Ролг Хупин
Да, ..., Trim


да, пусть несёт, пятница же
17 май 19, 17:22    [21887509]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать все символы ; в конце строки?  [new]
ЕвгенийВ
Member

Откуда: Москва
Сообщений: 4817
fkthat
ЕвгенийВ,

Да, кстати, Concat еще оказывается по скорости быстрее на 10-20% чем StringBuilder. Причем, даже если у билдера загодя задавать капасити, то ситуация не меняется. Ну что же, будем теперь знать и использовать

Который принимает IEnumerable<string> values использует внутри StringBuilder, остальные вычисляют длину, аллоцируют память и копируют туда данные из переданных строк.
20 май 19, 10:24    [21888603]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать все символы ; в конце строки?  [new]
fkthat
Member

Откуда:
Сообщений: 1366
ЕвгенийВ,

Нет, Concat не использует внутри StringBuilder - я специально смотрел. Но Concat-у надо зараннее прочитать всю коллекцию, чтобы узнать суммарную длину строк, только после этого он начинает их конкатчить. Причем он использует unsafe pointers с инструкцией fixed, что блокирует GC на время его работы. Т.ч., в принципе, в некоторых сценариях моет быть лучше Concat, а в некоторых все-таки StringBuilder.
20 май 19, 10:30    [21888610]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать все символы ; в конце строки?  [new]
Roman Mejtes
Member

Откуда: г. Пермь
Сообщений: 3463
fkthat,

fixed не блокирует GC, данная инструкция указывает, указывает на то. чтоб данный объект не перемещался в памяти в момент дефрагментации. Если объект не супер большой и расположен в Heap, GC может упаковать память (дефрагментировать) и переместить объекты 2 поколения в начало, а 0 в конец кучи (это в 2 словах). fixed объект этому не подвержен
20 май 19, 10:46    [21888624]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать все символы ; в конце строки?  [new]
ЕвгенийВ
Member

Откуда: Москва
Сообщений: 4817
fkthat
ЕвгенийВ,

Нет, Concat не использует внутри StringBuilder - я специально смотрел. Но Concat-у надо зараннее прочитать всю коллекцию, чтобы узнать суммарную длину строк, только после этого он начинает их конкатчить. Причем он использует unsafe pointers с инструкцией fixed, что блокирует GC на время его работы. Т.ч., в принципе, в некоторых сценариях моет быть лучше Concat, а в некоторых все-таки StringBuilder.

      [ComVisible(false)]
        public static String Concat<T>(IEnumerable<T> values) {
            if (values == null)
                throw new ArgumentNullException("values");
            Contract.Ensures(Contract.Result<String>() != null);
            Contract.EndContractBlock();

            StringBuilder result = StringBuilderCache.Acquire();
            using(IEnumerator<T> en = values.GetEnumerator()) {
                while (en.MoveNext()) {
                    if (en.Current != null) {
                        // handle the case that the enumeration has null entries
                        // and the case where their ToString() override is broken
                        string value = en.Current.ToString();
                        if (value != null)
                            result.Append(value);
                    }
                }            
            }
            return StringBuilderCache.GetStringAndRelease(result);
        }


https://github.com/microsoft/referencesource/blob/master/mscorlib/system/string.cs
20 май 19, 10:49    [21888631]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / WinForms, .Net Framework Ответить