【问题标题】:Convert string to uppercase in scala [closed]在scala中将字符串转换为大写[关闭]
【发布时间】:2020-05-07 08:37:57
【问题描述】:
class Student(firstName: String, lastName: String, rollNum: String)

需要将 firstName 和 lastName 转换为大写。当我们分配值时,设计方面的最佳方式是什么

val st1 = Student(
                  firstName = firstName.toUpperCase, 
                  lastName = lastName.toUpperCase, 
                  rollNum = rollNum
          )

case class UpperCaseStr(rawValue: String) {
   def value: String = rawValue.toUpperCase
}

val st1 = Student(
                  firstName = UpperCaseStr(firstName), 
                  lastName = UpperCaseStr(lastName), 
                  rollNum = rollNum
          )

【问题讨论】:

  • 第二种方法不编译。第一种方法是正确的。
  • 如果您的域对名称有一些规则,我将使用智能构造函数创建一个单独的类型,并使用该类型而不是 String。如果这是一次性的,我认为.toUpperCase 就足够了。

标签: string scala uppercase


【解决方案1】:

如果您的域需要对名称执行一些规则,我会创建一个智能构造函数:

case class Name private (val value: String) {
  def copy(value: String = this.value) = Name(value)
}
object Name {
  def apply(value: String) = new Name(value.toUpperCase)
}

用它代替String

case class Student(firstName: Name, lastName: Name, rollNum: String)

如果它只是一次不能满足域建模正确性的事情,我只会使用一个可以调用 .toUpperCase 的助手,就像 @Markus Appel 建议的那样。

【讨论】:

    【解决方案2】:

    您应该将Student 设为case class,否则将无法正常工作。

    然后,使用.copy.toUpperCase 的组合:

    case class Student(firstName: String, lastName: String, rollNum: String)
    
    def upperCaseStudent(s: Student): Student = s.copy(
      firstName = s.firstName.toUpperCase,
      lastName = s.lastName.toUpperCase
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-16
      • 2018-05-28
      • 2021-06-11
      • 2018-01-13
      • 2011-07-28
      • 1970-01-01
      • 2010-10-18
      相关资源
      最近更新 更多