Scala: лучший способ форматирования строк в PhoneNumber и использование Java MessageFormat

Я ищу лучший способ лучше реализовать следующее:

Я импортировал import java.text.MessageFormat, чтобы установить нужный формат.

  1. val szphoneFrmt содержит нужный мне формат.
  2. val szInitialString имеет значение, которое я вытащил из базы данных.
  3. val szWorkString разбивает строку на подстроку.
  4. val szWorkPhone — это последняя строка с отформатированной строкой.

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

У кого-нибудь есть предложения по очистке этого кода? Я был бы совершенно согласен отказаться от использования Java MessageFormat, но я не видел никаких других разумных решений.

  val szphoneFrmt = new MessageFormat("1 {0}{1}-{2}")  
  val szInitialString = applicant.ApplicantContact.Phone1.toString
  val szWorkString = { 
      if (szInitialString != null) {
          Array(szInitialString.substring(0,3), 
                szInitialString.substring(3,6), 
                szInitialString.substring(6))
      } else { null } 
  }

  val szWorkPhone = phoneFrmt.format(szWorkString)

person whenpigswifi    schedule 16.06.2015    source источник
comment
Если вы пишете на Scala, я бы порекомендовал обернуть те вещи, которые могут возвращать null, с Option.   -  person wheaties    schedule 16.06.2015


Ответы (1)


Поскольку нам не нравятся нули, я завернул ваше возможное нулевое значение в Option. Если у параметра есть значение, я создаю из него массив, а затем передаю его в средство форматирования. Если у него не было значения, я присваиваю ему значение "".

val szPhoneFrmt = new MessageFormat("1 {0}{1}-{2}")  
val szInitialString = Option(applicant.ApplicantContact.Phone1.toString)
val szWorkString = szInitialString
    .map { s => Array(s.substring(0,3), s.substring(3,6), s.substring(6)) }
    .map(szPhoneFrmt.format)
    .getOrElse("")
person thoredge    schedule 16.06.2015
comment
Спасибо @thoredge, мне это определенно кажется намного чище! Позвольте мне взглянуть и посмотреть, смогу ли я запустить это. Мне нужно больше изучить этот вариант, так как я использовал его раньше, но не знал, что могу использовать его таким образом. - person whenpigswifi; 16.06.2015