Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.73/92: Рейтинг темы: голосов - 92, средняя оценка - 4.73
27 / 27 / 7
Регистрация: 15.06.2014
Сообщений: 165
1

Как удалить часть строки до определенного слова

18.07.2014, 15:17. Показов 17694. Ответов 19
Метки нет (Все метки)

Всем привет. Есть строка "C:/Users/AppData/Roaming/.Data/objects/1233as...". Нужно удалить всю строку до слова objects. Если разбивать строку при помощи Split(); , то есть вероятность что в пути найдется символ 'o'. Помогите. Заранее спасибо.
P.S Слово objects тоже можно удалить.
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.07.2014, 15:17
Ответы с готовыми решениями:

Как удалить строки без определенного слова?
Есть файл со строками, нужно удалить из него строки, которые не содержат, например, слово...

Как получить часть строки до определенного места?
Имеется текст: Name\t\tISO/et Form\t\t51X\t61Y \t - это табуляция. Между символами,...

Как удалить текст с конца строки до определенного символа?
Здравствуйте, как удалить текст с конца строки до определенного символа?Заранее спасибо

Поиск определенного слова в строке и замена определенного символа после этого слова
Представим что у нас есть следующая строка: "Дядя Петя 10 раз ударил дядю Васю, но дядя Вася...

19
64 / 64 / 16
Регистрация: 07.04.2014
Сообщений: 332
18.07.2014, 15:25 2
сплитуй по C:/Users/AppData/Roaming/.Data/
0
foo();
885 / 587 / 222
Регистрация: 03.07.2013
Сообщений: 1,549
Записей в блоге: 2
18.07.2014, 15:28 3
Frederick, мб так?
C#
1
str = str.Remove(0, str.IndexOf("objects", StringComparison.InvariantCulture));
0
64 / 64 / 16
Регистрация: 07.04.2014
Сообщений: 332
18.07.2014, 15:38 4
Цитата Сообщение от rattrapper Посмотреть сообщение
1
str = str.Remove(0, str.IndexOf("objects", StringComparison.InvariantCulture));
Да гемор не нужный.

C#
1
2
3
4
5
using System.Text.RegularExpressions;
 
var result = Regex.Split(str, "C:/Users/AppData/Roaming/.Data/")
 
//result[1]==objects/1233as...
0
foo();
885 / 587 / 222
Регистрация: 03.07.2013
Сообщений: 1,549
Записей в блоге: 2
18.07.2014, 16:08 5
fidgi, я ведь Ваш вариант никак не критиковал, верно? Просто предложил ТС'у свою версию решения задачи. Хотя именно Ваш код я бы назвал "гемором", так как:
1) Путь к папке должен всегда быть одним и тем же, да еще и совпадать с тем, который Вы прописали в коде
2) В Вашем случае создается массив, который там ни к чему, так как получить нужно только одно значение
3) Ну и в конце концов, название метода Remove само по себе говорит о том, что происходит в коде, чего не скажешь про Split.
И на счет длинны кода я бы тоже не спешил
C#
1
2
3
Regex.Split(str, "C:/Users/AppData/Roaming/.Data/")[1]
//...
str.Remove(0, str.IndexOf("objects"));
З.Ы. чуть не забыл:
Цитата Сообщение от fidgi Посмотреть сообщение
не нужный

У меня все
1
64 / 64 / 16
Регистрация: 07.04.2014
Сообщений: 332
18.07.2014, 16:18 6
rattrapper, ну это была не критика, не обижайтесь , просто для понимания Ваш способ для меня сложнее.

сделаю так:
C#
1
2
3
str=Regex.Split(str, ".Data/")[2];
 
str.Remove(0, str.IndexOf("objects"));
как видите
1) путь к папке тот же
2) массива нет
3) длина кода меньше

по понятности кода каждому своё.
0
foo();
885 / 587 / 222
Регистрация: 03.07.2013
Сообщений: 1,549
Записей в блоге: 2
18.07.2014, 16:50 7

Не по теме:

Цитата Сообщение от fidgi Посмотреть сообщение
каждому своё
Именно потому я сначала молча, без комментариев предложил свой вариант. И был сильно расстроен, когда Вы назвали его гемором, потому, что Вам сложно понять.


fidgi, если уж и пользоваться Split'ом, то очень рекомендую Вам познакомиться со стандартным, а не притаскивать Regex в тривиальные задания.
C#
1
str.Split(new[] {".Data/"}, StringSplitOptions.None)[1];
работает в сотни раз быстрее
0
Master of Orion
Эксперт .NET
6085 / 4941 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
18.07.2014, 17:08 8
fidgi, гемор?о_0 у вас вариант самый долгий Регэкспы просто так - это бред

и да, ваш регэксп неправильно работает


rattrapper, а у вас тоже длинно получается для элементарной задачи:
C#
1
str = str.Remove(str.IndexOf("objects"));
хотя, конечно, если регистр может меняться, то последний параметр можно оставить. А вот 0 не к чему.
1
64 / 64 / 16
Регистрация: 07.04.2014
Сообщений: 332
18.07.2014, 17:29 9
Цитата Сообщение от Psilon Посмотреть сообщение
и да, ваш регэксп неправильно работает
как так? У меня работал в проекте неделю назад. потом проверю
0
Master of Orion
Эксперт .NET
6085 / 4941 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
18.07.2014, 17:37 10
fidgi, я не говорю, что он не работает Я говорю, что он неправильно работает. Например, строка str = "C:/Users/AppData/Roaming/ЫData/" по условию не подходит, а у вас скушается за милую душу

Регэкспы для сложных поисков по строкам с масками. Для обрезки/нахождения каких-то подстрок и удалений ничего проще и быстрее обычных методов строк не надо придумывать

За сегодняшний день я на 2 или 3 поста ответил с использованием регэкспов, но только потому, что они там реально нужны были.
0
27 / 27 / 7
Регистрация: 15.06.2014
Сообщений: 165
18.07.2014, 18:31  [ТС] 11
rattrapper, Спасибо, ваш способ работает, но мне нужно еще удалить и само слово objects, а оставить только что за ним: objects/ex; objects/ex2 ...
0
Master of Orion
Эксперт .NET
6085 / 4941 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
18.07.2014, 19:03 12
C#
1
2
string s = "objects";
str = str.Remove(str.IndexOf(s) + s.Length);
0
27 / 27 / 7
Регистрация: 15.06.2014
Сообщений: 165
18.07.2014, 19:16  [ТС] 13
Psilon, Это удаляет все после "оbjects", а мне нужно чтобы удалилось все ДО "оbjects".
0
Master of Orion
Эксперт .NET
6085 / 4941 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
18.07.2014, 19:24 14
Лучший ответ Сообщение было отмечено Frederick как решение

Решение

Frederick, на любой вкус и цвет:
C#
1
2
3
4
5
6
7
            string obj = "objects";
            string s = "C:/Users/AppData/Roaming/.Data/objects/1233as...";
            Console.WriteLine(s);
            Console.WriteLine(s.Remove(s.IndexOf(obj)));
            Console.WriteLine(s.Remove(s.IndexOf(obj) + obj.Length));
            Console.WriteLine(s.Substring(s.IndexOf(obj)));
            Console.WriteLine(s.Substring(s.IndexOf(obj) + obj.Length));
2
27 / 27 / 7
Регистрация: 15.06.2014
Сообщений: 165
18.07.2014, 19:37  [ТС] 15
Psilon, Спасибо, Шилдт в своей книге об этом не писал(
0
Master of Orion
Эксперт .NET
6085 / 4941 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
18.07.2014, 19:38 16
Frederick, а что именно он должен был написать?
0
27 / 27 / 7
Регистрация: 15.06.2014
Сообщений: 165
18.07.2014, 19:41  [ТС] 17
Цитата Сообщение от Psilon Посмотреть сообщение
а что именно он должен был написать?
Да хоть примеры таких строковых преобразований. У него со строками в книге плохо)
0
Master of Orion
Эксперт .NET
6085 / 4941 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
18.07.2014, 21:35 18
Frederick, а еще у него почему-то нету в книжке главы по хоткеям в решарпере, без которых я никуда, и никак не хочет обсуждать взаимодействие управляемых сборок SharePoint с COM-объектами. Вот редиска, правда? Мне пришлось другую литературу искать, чтобы это изучить. Ах, как он мог, не уложить в 600 страниц все что в мире есть Диверсант, однако!
1
27 / 27 / 7
Регистрация: 15.06.2014
Сообщений: 165
18.07.2014, 23:19  [ТС] 19
Цитата Сообщение от Psilon Посмотреть сообщение
в 600 страниц
В 1000 + страниц. У меня полное руководство. Ну я не говорю что все должен описать, но хотя бы операции со строками - обязан.
0
Master of Orion
Эксперт .NET
6085 / 4941 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
19.07.2014, 11:19 20
Frederick, как думаешь, сколько нужно места, чтобы описать все эти методы?
http://msdn.microsoft.com/ru-r... 10%29.aspx
а ведь это не все, есть еще интернирование, небезопасная работа со строками.... Короче, в нижку всего не уместить, поэтому и нужно читать несколько, да еще и практиковаться
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.07.2014, 11:19

Чтение строки после определенного слова
Здравствуйте! Столкнулся со следующей проблемой... Допустим, у меня есть в буфере строка: 4145223 ...

Как удалить строки, не содержащие определенного слова
В TextBoxe находится текстнога рука воренье нога голова сок нога рука волосы нога глаз листья...

Как удалить от начала строки до определенного символа/слова
Здравствуйте, есть у меня строка "prxfire1.Text": 2 x <a...

Удалить часть строки до определенного символа
Подскажите пожалуйста,как с помощью запроса в sql можно удалить часть строки до определенного...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.