Удаление персонажа, взятие номера после этого, удаление следующего и так далее - PullRequest
0 голосов
/ 14 марта 2019

Я пытаюсь сделать следующее в C #: у меня есть строка со следующими данными (это пример с самой длинной доступной строкой, она берется из базы данных, база данных может возвращать разные числа в строке в зависимости отпо какому идентификатору я выбираю): |1|,|2|,|3|,|4|,|5|,|6|,|7|,|8|,|9|,|10|,|11|,|12|,|13|,|14|,|15|,|16|,|17|,|18|,|19|,|20|,|21|,|22|,|23|,|24|,|25|,|26|,|27|,|28|,|29|,|30|,|31|,|32|,|33|,|34|,|35|,|36|,|37|,|38|,|39|,|40|,|41|,|42|,|43|,|44|,|45|,|46|,|47|,|48|,|49|,|50|,|51|,|52|,|53|

Это недели года, я хочу удалить все "|"и "," и сохраните каждое целое число в одном индексе в списке следующим образом:

`
weekList[0] = 1
weekList[1] = 2
weekList[2] = 3
weekList[3] = 4
weekList[4] = 5
.
.
.
weekList[49] = 50
weekList[50] = 51
weekList[51] = 52
weekList[52] = 53
`

Как этого достичь?Я много читал о регулярных выражениях, но никак не мог найти способ сделать это ...

Ответы [ 4 ]

1 голос
/ 14 марта 2019

Это будет работать для вас:

        string str = "|1|,|2|,|3|,|4|,|5|,|6|,|7|,|8|,|9|,|10|,|11|,|12|,|13|,|14|,|15|,|16|,|17|,|18|,|19|,|20|,|21|,|22|,|23|,|24|,|25|,|26|,|27|,|28|,|29|,|30|,|31|,|32|,|33|,|34|,|35|,|36|,|37|,|38|,|39|,|40|,|41|,|42|,|43|,|44|,|45|,|46|,|47|,|48|,|49|,|50|,|51|,|52|,|53|";
        str = str.Replace("|", "");

        string[] subStrings = str.Split(',');
        int[] ints = new int[subStrings.Length];
        for (int i = 0; i < subStrings.Length; i++)
        {
            ints[i] = Convert.ToInt32(subStrings[i]);
        } 
1 голос
/ 14 марта 2019

1) Разделите строку запятой (,).

2) Обрезать каждый элемент в разбитой строке символьным пространством () и каналом (|)

3) Разбор каждого элемента до int

string str = "| 1 |,| 2 |,| 3 |,| 4 |,| 5 |,| 6 |,| 7 |,| 8 |,| 9 |,| 10 |,| 11 |,| 12 |,| 13 |,| 14 |,| 15 |,| 16 |,| 17 |,| 18 |,| 19 |,| 20 |,| 21 |,| 22 |,| 23 |,| 24 |,| 25 |,| 26 |,| 27 |,| 28 |,| 29 |,| 30 |,| 31 |,| 32 |,| 33 |,| 34 |,| 35 |,| 36 |,| 37 |,| 38 |,| 39 |,| 40 |,| 41 |,| 42 |,| 43 |,| 44 |,| 45 |,| 46 |,| 47 |,| 48 |,| 49 |,| 50 |,| 51 |,| 52 |,| 53 |";

int[] arr = str.Split(',')
               .Select(x => x.Trim(new char[] { ' ', '|' }))
               .Select(x => int.Parse(x))
               .ToArray();

Теперь здесь arr - ваш целочисленный массив.

Демонстрация онлайн

Альтернатива:

1) Удалите трубу (|) и пробелы ().

2) Разделить запятой (,).

3) Разобрать каждую разделенную строку в int.

int[] arr = str.Replace("|", "")
               .Replace(" ", "")
               .Split(',')
               .Select(x => int.Parse(x))
               .ToArray();

Демонстрация в Интернете

0 голосов
/ 14 марта 2019
private void button1_Click(obj sender,EventArgs e)
{
String str = "|1|,|2|,|3|,|4|...";
char[] ch =str.ToArray(),weekList=new char[ch.Length];
Int index=1;
for (int i=1;i < ch.Length ;i++)
{
if(index < ch.length-1)
{
weekList[i] = ch[index];
Index += 4;
}
}
MessageBox.Show(weekList[0]);//1
MessageBox.Show(weekList[9]);//10
}
0 голосов
/ 14 марта 2019

Я придумал подход регулярного выражения, о котором вы просили. Сначала вы должны найти все цифры, используя шаблон Regex \ d + , этот шаблон соответствует одному или нескольким числам. Используйте Проверенное регулярное выражение , чтобы проверить свое регулярное выражение. Переберите совпадения и присвойте свой массив.

Вот пример, который я придумал с C # интерактивным:

string input = "| 1 |,| 2 |,| 3 |,| 4 |,| 5 |,| 6 |,| 7 |,| 8 |,| 9 |,| 10 |,| 11 |,| 12 |,| 13 |,| 14 |,| 15 |,| 16 |,| 17 |,| 18 |,| 19 |,| 20 |,| 21 |,| 22 |,| 23 |,| 24 |,| 25 |,| 26 |,| 27 |,| 28 |,| 29 |,| 30 |,| 31 |,| 32 |,| 33 |,| 34 |,| 35 |,| 36 |,| 37 |,| 38 |,| 39 |,| 40 |,| 41 |,| 42 |,| 43 |,| 44 |,| 45 |,| 46 |,| 47 |,| 48 |,| 49 |,| 50 |,| 51 |,| 52 |,| 53 |";
MatchCollection matches = Regex.Matches(input, @"\d+");
int[] values = new int[matches.Count];
for (int i = 0; i < matches.Count; i++)
    values[i] = Convert.ToInt32(matches[i].Value);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...