Как разделить число на части с помощью Groovy? - PullRequest
0 голосов
/ 23 октября 2018

Есть номер с форматом DDDDDRRRPC.Необходимо разделить его на части C, P, RRR, DDDDDD.Я не уверен, но на Java это может выглядеть так

String U_id_str = String.valueOf(U_id);  
int k_num = Integer.parseInt(U_id_str.substring(9))
int gend = Integer.parseInt(U_id_str.substring(8, 9)) 
int P_num = Integer.parseInt(U_id_str.substring(5, 8))
int birth_num = Integer.parseInt(U_id_str.substring(0, 5))

Как это можно сделать на Groovy?

1 Ответ

0 голосов
/ 23 октября 2018

Вы можете использовать регулярное выражение с оператором множественного присваивания Groovy , чтобы упростить код.Рассмотрим следующий пример:

import java.util.regex.Pattern

try {
    String U_id_str = "2100304213"

    Pattern pattern = Pattern.compile(/^([0-9]{5})([0-9]{3})([0-9])([0-9])$/)

    def (_, birthNum, pNum, gend, kNum) = (U_id_str =~ pattern)[0]

    println "birthNum = ${birthNum}, pNum = ${pNum}, gend = ${gend}, kNum = ${kNum}"

} catch (IndexOutOfBoundsException ex) {
    println "Input string does not match regular expression..."
}

В этом примере мы используем шаблон ^([0-9]{5})([0-9]{3})([0-9])([0-9])$, который определяет 4 части исходного числа (представленного в виде строки).В 4-й строке мы проверяем, соответствует ли входная строка заданному шаблону, используя оператор =~, который возвращает объект java.util.regex.Matcher, и присваиваем каждую соответствующую часть переменным birthNum, pNum, gend и kNum.По соображениям безопасности мы выполняем этот код внутри блока try-catch, поскольку (U_id_str =~ pattern)[0] может выдать IndexOutOfBoundsException, если входная строка не соответствует заданному шаблону.

И последнее, но не менее важное: имейте в виду, что matcher возвращает совпадающие части в виде строк, поэтому, если вы хотите передать эти переменные в методы, которые ожидают, например, Integer, вы должны явно привести их с помощью Integer.valueOf(...).

Вывод:

birthNum = 21003, pNum = 042, gend = 1, kNum = 3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...