Проблема сплит-функции в C # - PullRequest
       2

Проблема сплит-функции в C #

0 голосов
/ 05 сентября 2011
string value = "L3 ABCD L4 3501% L5 20%,L3 EFGH L4 17260% L5 20%,L3 IJKL L4 2051% L5 20%,L3 MNOP L4 2621% L5 20%,L3 QRST L4 45325% L5 20% L2 40%";

Я пытаюсь

string[] splitvalues = value.Split();

затем с помощью переключателя выяснить, является ли это L2, L3, L4, L5

Но значение на L5 получается "20%, L3"


Код:

string[] splitvalues = value.Split();

for (int i = 0; i < splitvalues .Length; i = i + 2)
{
    String id = splitvalues [i];
    switch (id)
    {
        case "L3":
            Name = splitvalues [i + 1];
            break;
        case "L4":
            Number1.FromString(splitvalues [i + 1]);
            break;
        case "L5":
            Number2.FromString(splitvalues [i + 1]);
            break;
        case "L2":
            Number3.FromString(splitvalues [i + 1]);
            break;
    }
}

Ответы [ 7 ]

2 голосов
/ 05 сентября 2011

Split () без параметров разделяет строку по пробелам по умолчанию. Если вы хотите разделить строку на другие символы, вам следует использовать перегрузку, которая принимает список символов-разделителей:

string[] splitvalues = value.Split(' ', ',');
2 голосов
/ 05 сентября 2011

Попробуйте это:

string[] arr = value.Replace("," , " ").Split(' ');
0 голосов
/ 05 сентября 2011

Похоже, что ваши данные должны быть разделены дважды, ',', кажется, ваш разделитель записей, а '', кажется, ваш разделитель полей;

Чтобы использовать эти данные, вы, вероятно, захотите использовать splitстроки, а затем использовать регулярное выражение в строках

Regex fieldRegex=new Regex("(?<key>.*?)\s(?<value>.*?)");
string value = "L3 ABCD L4 3501% L5 20%,L3 EFGH L4 17260% L5 20%,L3 IJKL L4 2051% L5 20%,L3 MNOP L4 2621% L5 20%,L3 QRST L4 45325% L5 20% L2 40%"; 
string[] lines= value.Split(',');
foreach (var line in lines) {
  matches=fieldRegex.Matches(line);
  foreach (var match in matches.OfType(Match)) {
     string key=match.Groups["key"].Value;
     string value=match.Groups["value"].Value;
     switch (key) {
       case "L3":  
          Name = value;
          break;  
       case "L4":  
          Number1.FromString(value);  
          break;  
      case "L5":  
          Number2.FromString(value);  
          break;  
      case "L2":  
          Number3.FromString(value);  
          break;  
     }  
  }
}
0 голосов
/ 05 сентября 2011

Вы можете использовать регулярное выражение L(\d+)\s([^,\s]+), например:

var result =    
    Regex.Matches(input, @"L(\d+)\s([^,\s]+)").OfType<Match>()
    .ToDictionary(k => int.Parse(k.Groups[1].Value), v => v.Groups[2].Value);
0 голосов
/ 05 сентября 2011

Попробуйте вот так

Добавьте это в коде

using System.Collections.Generic;;

program

        string value = "L3 ABCD L4 3501% L5 20%,L3 EFGH L4 17260% L5 20%,L3 IJKL L4 2051% L5 20%,L3 MNOP L4 2621% L5 20%,L3 QRST L4 45325% L5 20% L2 40%";
        string[] splitvalues = value.Split(',');
        List<string> outP = new List<string>();
        foreach (string s in splitvalues)
        {
            string[] innerSplit = s.Split();
            //use this 'innerSplit' variable for furture coding...
            outP.AddRange(innerSplit);
        }
0 голосов
/ 05 сентября 2011

Вы разделяетесь на пробел, но у вас также есть несколько запятых в строке:

"L3 ABCD L4 3501% L5 20%, L3 EFGH L4 17260% L5 20%, L3 IJKL L4 2051% L5 20%, L3 MNOP L4 2621% L5 20%, L3 QRST L4 45325% L5 20% L2 40% "

Снимите запятые, и вам будет хорошо идти.

Если вы не можете изменить строку, разделите ее на пробелы и запятые.

0 голосов
/ 05 сентября 2011

Split () без каких-либо параметров разделяется только на пробелы, поэтому splitValues ​​[5] для '20% L3' является правильным.

Можете ли вы уточнить свой вопрос, чтобы описать, чего вы хотите достичь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...