Как эффективно определить, запускается ли строка с числа, и затем получите весь после чисел вплоть до первого нечислового символа?

Важно понять, что Spring является существенно двумя вещами, одним созданным сверху другого:

  1. легкий вес А платформа DI/МОК и классы для реализации этого (например, контексты приложения XML, и т.д.); и
  2. Это легкий контейнер .

(2) объем кода Spring. В основном выберите JAVA-технологию, и Вы, вероятно, найдете, что Spring имеет классы помощника для нее. Это так, можно использовать ActiveMQ, Sun Один MQ или безотносительно и абстрагировать их являющийся Spring JmsTemplate, и то же идет для технологий доступа к данным, веб-сервисов, и т.д.

Все эти помощники использование (1) для проводного соединения их вместе.

6
задан MackM 26 February 2018 в 14:49
поделиться

2 ответа

public int GetLeadingNumber(string input)
{
    char[] chars = input.ToCharArray();
    int lastValid = -1;

    for(int i = 0; i < chars.Length; i++)
    {
        if(Char.IsDigit(chars[i]))
        {
            lastValid = i;
        }
        else
        {
            break;
        }
    }

    if(lastValid >= 0)
    {
        return int.Parse(new string(chars, 0, lastValid + 1));
    }
    else
    {
        return -1;
    }
}

Хотя это, строго говоря, было бы наиболее эффективным, решения для регулярных выражений, предлагаемые другими плакатами, очевидно, более лаконичны и могут быть более ясными, в зависимости от того, сколько обработки вы будете выполнять со строкой.

8
ответ дан 8 December 2019 в 16:05
поделиться

Регулярное выражение прекрасно разделит это:

var match = Regex.Match(text, @"^(\d+) (.*)$");

Затем match.Groups [0] .Value ] - год, а match.Groups [1] .Value - это заголовок («Просрочка», «Проценты за просрочку» и т. д.)

Вы можете использовать LINQ для применения сортировки (по убыванию года, title ascending):

string[] titles = new[] { "2008 Arrears", "2009 Arrears" };

var sortedTitles = 
    from title in titles
    let match = Regex.Match(title, @"^(\d+) (.*)$")
    orderby match.Groups[0].Value descending, match.Groups[1].Value
    select title;

listBox.ItemsSource = sortedTitles.ToArray();  // for example

Регулярное выражение может быть не самым быстрым решением; вот альтернатива, которая все еще поддерживается LINQ:

var sortedTitles =
    from title in titles
    let year = new string(title.TakeWhile(ch => char.IsDigit(ch)).ToArray())
    let remainder = title.Substring(year.Length).Trim()
    orderby year descending, remainder
    select title;
7
ответ дан 8 December 2019 в 16:05
поделиться
Другие вопросы по тегам:

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