Scala:将字符串格式化为 PhoneNumber 并使用 Java 的 MessageFormat 的更好方法

Scala: Better way for String Formatting to PhoneNumber and using Java's MessageFormat

我正在寻找更好的方法来更好地实现以下内容:

我已经导入 import java.text.MessageFormat 来设置我想要的格式。

  1. val szphoneFrmt 包含我想要的格式。
  2. val szInitialString 设置为我从数据库中提取的值。
  3. val szWorkString 通过子字符串分解字符串。
  4. val szWorkPhone 是带有格式化字符串的最终字符串。

现在我看到的问题是有时数据库中的值为空,因此 szInitialString 为空,因此我进行了检查以防止越界异常。现在这段代码可以正常工作了,我可以正确地格式化字符串,但我认为这不是一个好的解决方案。

有人对整理这段代码有什么建议吗?我完全可以放弃使用 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)

由于我们不喜欢空值,所以我将您可能为空的值包装到一个选项中。如果选项有一个值,我从它创建数组,然后将它传递给格式化程序。如果它没有值,我给它值“”。

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("")