Разделение массива строк

#c# #string #split

#c# #строка #разделение

Вопрос:

У меня есть массив строк string[] arr , который содержит такие значения, как N36102W114383 , N36102W114382 и т.д…
Я хочу разделить каждую строку таким образом, чтобы значение выглядело следующим образом N36082 и W115080 .

Каков наилучший способ сделать это?

Комментарии:

1. На каком языке? ИМО, вы не хотите использовать regex для этого.

2. что-то вроде этого? (Nd )(Wd ) или (N[0-9] )(W[0-9] )

3. Всегда ли строки имеют одинаковую длину?

Ответ №1:

Это должно сработать у вас.

 Regex regexObj = new Regex(@"wd "); # matches a character followed by a sequence of digits
Match matchResults = regexObj.Match(subjectString);
while (matchResults.Success) {
    matchResults = matchResults.NextMatch(); #two mathches N36102 and W114383
}
  

Ответ №2:

Если у вас каждый раз фиксированный формат, вы можете просто сделать это:

 string[] split_data = data_string.Insert(data_string.IndexOf("W"), ",")
    .Split(",", StringSplitOptions.None); 
  

Здесь вы вставляете узнаваемый разделитель в свою строку, а затем разделяете ее этим разделителем.

Ответ №3:

Простите меня, если это не совсем компилируется, но я бы просто разбил и написал функцию обработки строк вручную:

 public static IEnumerable<string> Split(string str)
{
    char [] chars = str.ToCharArray();
    int last = 0;
    for(int i = 1; i < chars.Length; i  ) {
        if(char.IsLetter(chars[i])) {
            yield return new string(chars, last, i - last);
            last = i;
        }
    }

    yield return new string(chars, last, chars.Length - last);
}
  

Ответ №4:

Если вы используете C #, пожалуйста, попробуйте:

 String[] code = new Regex("(?:([A-Z][0-9] ))").Split(text).Where(e => e.Length > 0 amp;amp; e != ",").ToArray();
  

Ответ №5:

в случае, если вы ищете только формат NxxxxxWxxxxx, это будет просто отлично :

 Regex r = new Regex(@"(N[0-9] )(W[0-9] )");

Match mc = r.Match(arr[i]);
string N = mc.Groups[1];
string W = mc.Groups[2];
  

Ответ №6:

Используя строковые функции ‘Split’ и ‘isLetter’, в c # это относительно просто.

Не забудьте написать модульные тесты — в следующих могут быть некоторые угловые ошибки!

     // input has form "N36102W114383, N36102W114382"
    // output: "N36102", "W114383", "N36102", "W114382", ...
    string[] ParseSequenceString(string input)
    {
        string[] inputStrings = string.Split(',');

        List<string> outputStrings = new List<string>();

        foreach (string value in inputstrings) {
            List<string> valuesInString = ParseValuesInString(value);
            outputStrings.Add(valuesInString);
        }

        return outputStrings.ToArray();
    }

    // input has form "N36102W114383"
    // output: "N36102", "W114383"
    List<string> ParseValuesInString(string inputString)
    {
        List<string> outputValues = new List<string>(); 
        string currentValue = string.Empty;
        foreach (char c in inputString)
        {
            if (char.IsLetter(c))
            {
                if (currentValue .Length == 0)
                {
                    currentValue  = c;
                } else
                {
                    outputValues.Add(currentValue);
                    currentValue = string.Empty;
                }
            }
            currentValue  = c;
        }
        outputValues.Add(currentValue);
        return outputValues;
    }