Regex для соответствия определенным числам и дефисам [дубликат]

Что такое необработанный тип и почему я часто слышу, что они не должны использоваться в новом коде?

«Необработанный тип» - это использование общего класс без указания аргумента (ов) типа для его параметризованного типа (ов), например используя List вместо List<String>. Когда дженерики были введены в Java, несколько классов были обновлены для использования дженериков. Использование этого класса в качестве «необработанного типа» (без указания аргумента типа) позволило сохранить прежний код.

«Необработанные типы» используются для обратной совместимости. Их использование в новом коде не рекомендуется, потому что использование универсального класса с аргументом типа допускает более сильную типизацию, что, в свою очередь, может улучшить понятность кода и привести к появлению потенциальных проблем раньше.

Что такое альтернатива, если мы не можем использовать необработанные типы и как это лучше?

. Предпочтительной альтернативой является использование общих классов, как предполагалось, - с подходящим аргументом типа (например, List<String>). Это позволяет программисту более конкретно указывать типы, придавая будущим сопровождающим больше смысла предполагаемое использование переменной или структуры данных и позволяет компилятору обеспечивать лучшую безопасность типов. Эти преимущества вместе могут улучшить качество кода и помочь предотвратить появление некоторых ошибок кодирования.

Например, для метода, в котором программист хочет, чтобы переменная List, называемая «имена», содержит только строки:

List<String> names = new ArrayList<String>();
names.add("John");          // OK
names.add(new Integer(1));  // compile error
6
задан nhahtdh 12 January 2014 в 10:09
поделиться

2 ответа

Обычно вы можете использовать -?. В качестве альтернативы вы можете использовать -{0,1}, но вы должны обнаружить, что ? для «нуля или одного вхождения» поддерживается почти везде.

pax> echo 19740103-0379 | egrep '19740103\-?0379'
19740103-0379

pax> echo 197401030379 | egrep '19740103\-?0379'
197401030379

Если вы хотите принять 12 цифр с любым номером вы можете сделать что-то вроде:

-*([0-9]-*){12}

, которое в основном равно нулю или более дефисов, за которыми следуют 12 вхождений (цифра с последующим нулем или более тире) и будет захватывать все такие как:

--3-53453---34-4534---

(конечно, вы должны использовать \d вместо [0-9], если ваш механизм регулярных выражений поддерживает это).

7
ответ дан paxdiablo 21 August 2018 в 05:57
поделиться
  • 1
    Вам нужно только убежать - в класс символов ([...]). Черточка не имеет особого значения в другом месте в регулярном выражении. – Richard 20 August 2010 в 08:34
  • 2
    Хороший звонок, @ Рихард, исправлено. – paxdiablo 20 August 2010 в 08:39

Вы можете попробовать разные:

\d* соответствует строке, состоящей только из цифр

\d*-\d*, соответствует строке цифр формата - тире - цифры

[0-9\-]* соответствует строке, состоящей только из тире и цифр

. Вы можете объединить их через | (или), так что у вас есть, например, (\d*)|(\d*-\d*): соответствует форматам только цифры и цифры -dash-цифры.

1
ответ дан phimuemue 21 August 2018 в 05:57
поделиться
Другие вопросы по тегам:

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