我使用此方法来确定字符串是否全部为大写。
def isAllUpperCase(s: String): Boolean =
s.foldLeft(true)((res, ch) => res && ch.isUpper)
IntelliJ警告可以简化对集合的此操作。可悲的是,我是斯卡拉诺布。有什么想法吗?
答案 0 :(得分:5)
从foldLeft
开始,请考虑给定字符串s
,
(true /: s)(_ && _.isUpper)
或等效,
s.foldLeft(true)(_ && _.isUpper)
对于此特定问题,请同时考虑forall
,如下所示
"abc".forall(_.isUpper)
res: Boolean = false
"Abc".forall(_.isUpper)
res: Boolean = false
"ABC".forall(_.isUpper)
res: Boolean = true
即,只有当每个被检查的元素的计算结果为真时,它才会计算为真。
然后,
implicit class RichUppercase(val s: String) extends AnyVal {
def allUpper() = s.forall(_.isUpper)
}
等等
"abc".allUpper
res: Boolean = false
"ABC".allUpper
res: Boolean = true
<强>更新强>
另一种方法依赖于找到原始字符串与大写字符串之间的差异,如此,
val a = "Abc"
a: String = abc
a diff a.toUpperCase
res: String = bc
a.toUpperCase diff a.toUpperCase
res: String = ""
因此产生的空字符串表示字符串中的所有字符都是大写的。
答案 1 :(得分:1)
您想要forall
:
def isAllUpperCase(s: String): Boolean = s.forall(_.isUpper)