#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;
}