Как я могу проверить некоторые числа в конце строки и увеличить их на 1, если они существуют? - PullRequest
2 голосов
/ 08 января 2020

Это крайне специфичный c сценарий, но я здесь перепутал синтаксис, и у меня возникли проблемы с поиском оптимального / функционального способа сделать это. Я объясню: допустим, у меня есть строка, отформатированная следующими способами: «My-Test-docID», «My-Test-docID-01», «My-Test-docID-02», «My-Test- docID-03 ", et c.

Вот что я пытаюсь сделать sh. Я хочу сначала проверить, заканчивается ли строка "- [2 di git number]" или нет. Если числа существуют в конце, они всегда будут после дефиса, за которым следуют 2 цифры, такие как «-01», «-02», «-10» и т. Д. c.

Пример : Если строка «My-Test-docID», то я хотел бы изменить ее на «My-Test-docID-01».

Если строка заканчивается цифрами, тогда я хочу увеличить их на 1.

Пример: Если строка заканчивается на «-01», я хочу изменить ее на «-02», чтобы «My-Test-docID-01» "становится" My-Test-docID-02 ". Если он заканчивается на «-02», он становится «-03» таким образом, что «My-Test-docID-02» становится «My-Test-docID-03», et c.

У меня есть некоторые псевдокодовые идеи, но не могу понять точный синтаксис. Моя интуиция подсказывает мне сначала проверить окончание с помощью регулярного выражения, а затем, если число существует, определить, что представляют собой последние два числа, и увеличить на 1. То, что я собираюсь выписать, определенно не оптимально, но оно показывает, что До сих пор я был в состоянии придумать и, надеюсь, объяснить сценарий более четко.

if (docId.endsWith("-[0-9][0-9]")) {
  //last 2 digits of docId +=1
else {
  docId = docId + "-01"
}

У меня такое чувство, что в конечном итоге это будет выглядеть намного сложнее, но это, по сути, то, что я пытаюсь чтобы сделать, и я ищу правильный синтаксис для условия if и оператора if.

Примечание: если это проще, число в конце не должно включать ноль при обстоятельствах меньше 10 как "-01" и "-02", но я думаю, что это может быть проще структурно. Реально они никогда не будут больше 09, НО это не гарантировано, и я хотел бы написать этот код как Dynami c, как я могу. Это, как говорится, больше, чем «-99» на самом деле даже невозможно, поэтому я не беспокоюсь об этом.

1 Ответ

4 голосов
/ 08 января 2020

Вы можете использовать этот фрагмент в Java:

String str = "Test-docID-02";
final String regex = "^(.*-)(\\d{2})$";
final Pattern p = Pattern.compile(regex);

Matcher m = p.matcher(str);

if (m.matches()) {
    str = m.group(1) + String.format("%02d", Integer.parseInt(m.group(2)) + 1);
} else {
    str += "-01";
}

//=> Test-docID-03

Сведения о регулярном выражении:

  • ^: начало
  • (.*-): сопоставление 0 или более символов до последнего дефиса и захват в группе # 1
  • (\\d{2}): сопоставление последних 2 цифр и захват в группе # 2
  • $: конец

Обратите внимание, что он преобразует My-Test-docID-99 в My-Test-docID-100

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