Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 20.08.2017
Сообщений: 18
1

Работа со строкой

22.09.2018, 10:58. Показов 1857. Ответов 9

Есть такой сайт, 220vk.com
В нём есть текстовое поле, куда нужно вводить айди/домен пользователя.
Так вот, если туда ввести полную ссылку (https://vk.com/durov), (http://vk.com/durov) или (vk.com/durov) то он это обрезает так, что остается (durov).

Как такое реализовать?
0

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

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

Работа со строкой(Затупок)
Всем привет, решаю одну вроде бы и не сложную задачу. Нужно составить строку размером в 10...

Работа с адресной строкой
Всем привет. Мне нужно по адресу узнать имя компьютера. Есть два адреса: 1....

Работа с командной строкой Windows
Здравствуйте. Имеется файл *.cmd и раньше мне нужно было его вызывать из кода программы на C#....

Работа со строкой и шрифтом из картинки
Здравствуйте, форумчане! Столкнулся с вопросом. И вроде знаний, с одной стороны, хватает, а...

9
15 / 14 / 9
Регистрация: 21.11.2015
Сообщений: 86
22.09.2018, 13:15 2
String class
0
148 / 145 / 103
Регистрация: 30.10.2016
Сообщений: 311
22.09.2018, 13:21 3
Можно использовать метод String.Substring, который извлекает подстроку из данного экземпляра. Подстрока начинается в указанном положении символов и продолжается до конца строки.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
namespace SubS
{
    internal class Program
    {
        private static void Main()
        {
            string link = "https://vk.com/durov";
            //string link = "http://vk.com/durov";
            //string link = "vk.com/durov";
 
            if (link.Contains("https://vk.com/"))
                link = link.Substring(15);
            else if (link.Contains("http://vk.com/durov"))
                link = link.Substring(14);
            else
                link = link.Substring(7);
 
            Console.WriteLine(link);
 
            Console.ReadLine();
        }
    }
}
0
Модератор
9466 / 6687 / 1866
Регистрация: 21.04.2018
Сообщений: 19,986
Записей в блоге: 2
22.09.2018, 13:45 4
Цитата Сообщение от leibniz958 Посмотреть сообщение
Так вот, если туда ввести полную ссылку (https://vk.com/durov), (http://vk.com/durov) или (vk.com/durov) то он это обрезает так, что остается (durov).
А из такой строки https://vk.com/durov/ivan , что должно вернуться?
0
0 / 0 / 0
Регистрация: 20.08.2017
Сообщений: 18
22.09.2018, 14:22  [ТС] 5
Цитата Сообщение от Элд Хасп Посмотреть сообщение
А из такой строки https://vk.com/durov/ivan , что должно вернуться?
Такое я не буду обрабатывать.
0
Модератор
9466 / 6687 / 1866
Регистрация: 21.04.2018
Сообщений: 19,986
Записей в блоге: 2
22.09.2018, 16:01 6
Лучший ответ Сообщение было отмечено leibniz958 как решение

Решение

Цитата Сообщение от leibniz958 Посмотреть сообщение
Такое я не буду обрабатывать.
Но Вы же должны предусмотреть все случаи.
Я к тому, чтобы Вы хотя бы словесно описали алгоритм того, что Вы хотите.
Допустим. Вернуть то, что находится после последнего слеша. Если слешей большего одного - вернуть пустую строку. И т.д.

Добавлено через 34 минуты
По указанному алгоритму можно сделать и так
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
        #region Работа со строкой
        static string WorkString(string link)
        {
            //string link = "https://vk.com/durov";
            String _ret = link.Replace("//", ""); // Удаление двойного слеша
            if (_ret.Contains("/")) // Определение есть ли в строке слеш
            {
                String[] _retArr = _ret.Split(new string [] { "/"}, StringSplitOptions.None);
                return  _retArr[_retArr.Length -1]; // Получение содержимого после последнего слеша
            }
            return ""; // Пустая строка, если не было слешей
        }
        #endregion
Добавлено через 9 минут
Или if заменить таким
C#
1
            if (_ret.Count (_ch => _ch == '/')==1) // Определение что слеш только один
1
0 / 0 / 0
Регистрация: 20.08.2017
Сообщений: 18
22.09.2018, 19:37  [ТС] 7
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Но Вы же должны предусмотреть все случаи.
Я к тому, чтобы Вы хотя бы словесно описали алгоритм того, что Вы хотите.
Алгоритм таков:
1. Ввод ссылки/айди в текстбокс
2. Обработка
3. Отправка в другой метод айдишник

Но что, если человек вводит просто id333? При этом нельзя просто так обрубать слово id, поскольку могут быть люди, у которых домен начинается с id: vk.com/iddurov, vk.com/idlol.

Добавлено через 23 минуты
Ну, тут я решение дописал сам.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
string Link = "https://m.vk.com/iddurov";
            string Temp = Link.Replace("//", "");
            if (Temp.Contains("/"))
            {
                string[] TempArr = Temp.Split(new string[] { "/" }, StringSplitOptions.None);
                string id = TempArr[TempArr.Length - 1];
                
                if(id[0] == 'i' && id[1] == 'd' && Char.IsDigit(id[2])) 
                {
                    id = id.Replace("i", "");
                    id = id.Replace("d", "");
                }
                
                Console.WriteLine(id);
            }
Result: iddurov
0
801 / 550 / 237
Регистрация: 01.07.2018
Сообщений: 1,810
22.09.2018, 19:51 8
leibniz958,
C#
1
2
3
4
5
6
 string str = "http://vk.com/durov/";
            string str1 = "http://vk.com/id154421";
            string pattern = "(?<=m[\\/])[a-z]*[0-9]*";
            Regex rgx = new Regex(pattern);
            string match = rgx.Match(str).ToString(); //durov
            string match1 = rgx.Match(str1).ToString(); //id154421
0
Модератор
9466 / 6687 / 1866
Регистрация: 21.04.2018
Сообщений: 19,986
Записей в блоге: 2
22.09.2018, 20:30 9
Цитата Сообщение от leibniz958 Посмотреть сообщение
Ну, тут я решение дописал сам.
Честно говоря, не понял, что Вы делаете.
Эти строки
C#
1
2
                    id = id.Replace("i", "");
                    id = id.Replace("d", "");
Удаляют все "i" и все "d". Т.е. из строки Вы получите следующее
  • vk.com/iddurov -> iddurov - это, похоже, Ваш результат
  • vk.com/id12345 -> 12345 - это тоже
  • vk.com/id1durov -> 1urov - а вот это вряд ли - нет второй "d".

Или я ошибаюсь и Вам нужен такой результат?

Добавлено через 4 минуты
Цитата Сообщение от leibniz958 Посмотреть сообщение
Алгоритм таков...
Вы меня не совсем поняли. Вы написали для чего Вы хотите это использовать. А я просил словесно описать какой результат из какой строки Вы хотите получить. Не понимая, что Вам надо - помочь трудно.
Если решение ещё не найдено, приведите хотя бы табличку из двух столбцов: вероятные входные строки и какой должен быть результат.

Добавлено через 5 минут
Может быть Вам вместо if в 8-12 строках нужно такое?
C#
1
2
            if (id.Substring(0,2)=="id" && Int32.TryParse (id.Substring(2,id.Length-2),out int numb ))
                id = id.Substring(2,id.Length-2) ;
0
0 / 0 / 0
Регистрация: 20.08.2017
Сообщений: 18
22.09.2018, 22:06  [ТС] 10
Цитата Сообщение от Элд Хасп Посмотреть сообщение
vk.com/id1durov -> 1urov - а вот это вряд ли - нет второй "d".
Такая ссылка априори недопустима.

Цитата Сообщение от Элд Хасп Посмотреть сообщение
А я просил словесно описать какой результат из какой строки Вы хотите получить.
http/s://vk.com/durov | durov
http/s://vk.com/id1 | 1
http/s://vk.com/im?sel=c1 | 1
http/s://vk.com/im?sel=1 | 1

Решение, как мне кажется, я нашёл. Тебе спасибо за реализацию и идею.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.09.2018, 22:06

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

Работа с текстом, строкой и словом в строке
Здравствуйте. Изучаю C# несколько месяцев (хобби), так что извините за банальность. Есть файл...

Работа с командной строкой Windows Service
Здравствуйте. Ума не приложу в чем проблема бьюсь весь день. Есть бат файл и файл скрипта. ...

Работа с предыдущей и следующей строкой, после найденной
Приветствую всех, возникла такая проблема. Есть файл в котором записаны строки данных. Они...

Работа с файлами, чтение/работа со строкой
Доброго времени суток. Начал работать с C++ Builder 6. Есть текстовый файл .txt с различными...


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

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

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