Как преобразовать строку в массив с неровными массивами

Посмотрите, каждый ответ выше, который предлагает записать замену строки постоянной строкой, может быть ошибочным. Зачем? Потому что вы не уважаете региональные настройки Windows! Windows гарантирует, что пользователь имеет право устанавливать любой разделитель. S / He может открыть панель управления, перейти в область области, нажать на продвинутый и изменить символ в любое время. Даже во время вашей программы. Подумайте об этом. Хорошее решение должно знать об этом.

Итак, сначала вам придется спросить себя, откуда этот номер, что вы хотите разобрать. Если это происходит от ввода в .NET Framework без проблем, потому что он будет в том же формате. Но, возможно, это происходило извне, возможно, с внешнего сервера, возможно, из старой БД, которая поддерживает только свойства строки. Там администратор db должен был дать правило, в котором формат должен быть сохранен. Если вы знаете, например, что это будет американская БД с американским форматом, вы можете использовать этот фрагмент кода:

CultureInfo usCulture = new CultureInfo("en-US");
NumberFormatInfo dbNumberFormat = usCulture.NumberFormat;
decimal number = decimal.Parse(db.numberString, dbNumberFormat);

Это будет прекрасно работать в любой точке мира. И, пожалуйста, не используйте «Convert.ToXxxx». Класс «Конвертировать» считается только базой для конверсий в любом направлении. Кроме того: вы также можете использовать аналогичный механизм для DateTimes.

-1
задан Murray Johnson 21 February 2019 в 11:25
поделиться

3 ответа

function splitMulti(str, tokens){
    var tempChar = tokens[0]; // We can use the first token as a temporary join character
    for(var i = 1; i < tokens.length; i++){
        str = str.split(tokens[i]).join(tempChar);
    }
    str = str.split(tempChar);
    return str;
}

var temp_result = splitMulti(yourString, [':', ';']) // or you can use regex
var final_result = [];
for (var i=0; i<temp_result.length; i++) {
  result.push([temp_result[i]]);
}
0
ответ дан kanhai shah 21 February 2019 в 11:25
поделиться

В настоящий момент ваша попытка не очень помогает достичь желаемого результата, так как вы разбиваете пробел .split(" "), но в вашей строке нет пробелов, и, таким образом, это не дает многого. [1112 ]

Вместо этого вы можете использовать регулярное выражение , чтобы разбить вашу текущую строку. Используя регулярное выражение, вы можете более точно контролировать, как разбивается ваша строка. Ниже я использовал:

/(\w+[:;])/

Здесь я делю строку на символы слова (подряд) (\w+), за которыми следует точка с запятой (;) или двоеточие (: ).

Это, однако, вернет одномерный массив с дополнительными "" (пустыми) строками внутри него. Таким образом, я также использовал .reduce , чтобы удалить ваши пустые строки и поместить каждое значение разбиения в свой собственный массив, что дает вам ваш результат.

См. Рабочий пример ниже:

const str = "Fred:Corwill;Wilfred:Corwill;Barney:Tornbull;Betty:Tornbull;Bjon:Tornbull;Raphael:Corwill;Alfred:Corwill",

res = str.split(/(\w+[:;])/).reduce((acc, wrd) => wrd ? [...acc, [wrd]] : acc, []);
console.log(res);

0
ответ дан Nick Parsons 21 February 2019 в 11:25
поделиться

Чтобы разделить строку на : или ;, вы можете просто использовать регулярное выражение для получения желаемого результата в методе .split().

const names = "Fred:Corwill;Wilfred:Corwill;Barney:Tornbull;Betty:Tornbull;Bjon:Tornbull;Raphael:Corwill;Alfred:Corwill"

const separatedNames = names.split(/:|;/) 

console.log(separatedNames) // => ["Fred", "Corwill", ...] 

См. Пример: https://jsfiddle.net/1mo5p6ed/

0
ответ дан Imbue 21 February 2019 в 11:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: