String 使用>;比较Scala中的两个字符串;及<;
我试图比较Scala中的两个字符串,试图找出字母表中哪一个是第一位的。即a在b之前,aab在abb之前,等等 似乎String 使用>;比较Scala中的两个字符串;及<;,string,scala,String,Scala,我试图比较Scala中的两个字符串,试图找出字母表中哪一个是第一位的。即a在b之前,aab在abb之前,等等 似乎和“b”>“a” res14:Boolean=true scala>“b”“aab”“?”>“!” res25:Boolean=true 这不是我的直觉 正如您在文档中看到的,您可以将定义的(以及所有其他)用于字符串。最终,这会将字符串的元素分解为底层Chars,它们是unicode。因此,您需要比较unicode值以模拟scalac显示的逻辑 参考一个确定的结论,我们发现 U+00
和
“b”>“a”
res14:Boolean=true
scala>“b”<“a”
res15:布尔值=假
scala>“aab”<“abb”
res16:Boolean=true
然而,这个方法并没有告诉我它到底有什么作用,而且在线教程似乎都没有使用这个方法来比较字符串。因此,我想知道:
- 这是一种故障安全的方法来完成我想做的事情,即比较两个字符串的字母顺序吗
- 在Scala中是否有一种更常见的方法,我在这里遗漏了
- 它到底是如何工作的——例如
这不是我的直觉 正如您在文档中看到的,您可以将定义的
(以及所有其他)用于字符串。最终,这会将字符串的元素分解为底层Char
s,它们是unicode。因此,您需要比较unicode值以模拟scalac显示的逻辑
参考一个确定的结论,我们发现
U+0021!感叹号
及
U+003F?问号
所以,事实上,!
它到底是如何工作的
和其他比较运算符委托给compareTo
方法,其确切行为记录在。例如,x>y
与x.compareTo(y)>0
相同
这是一种故障安全的方法来完成我想做的事情,即比较两个字符串的字母顺序吗
不。如果你考虑到大小写(和变音符号,和…),它提供了一个顺序,但不是字母顺序。例如,“b”>“A”
为假
对于完整的字母顺序,您可能需要一个。
(我还建议阅读,开始了解这些规则对于英语来说是多么重要)。我相信,对于您可以提供的任何unicode序列,比较操作都是故障安全的”,如果您的意思是它提供了一致的结果,并且从不引发异常,那么是的。但是这个结果与字母顺序不同:只需比较“A”
和“b”
,我的意思是它只是一致的。我试图解释通过表引用进行排序的机制,从该表中可以明显看出,大小写很重要。依赖ascii的传统字符比较也有同样的趋势。在比较字符串时,请将字符串完全大写或小写:)感谢Alexey给出的完整答案!我明白你的观点,用大写字母等。;我总是用小写字母和标点符号来清理所有的预处理,但在问题中没有说清楚。。。我将阅读Collator
,这似乎是我需要的&我不知道的。如果您处理的是自然语言字符串,我建议您阅读更多关于Unicode的内容。
val string1 = "\u2200"
val string2 = "\uFB30"
string1 < string2
val string3 = string1 + string2
val string4 = string2 + string1
string3 < string4
string4 < string3
string3 == string1 + string2
string4 == string1 + string2
string1: String = ∀
string2: String = אּ // note: aleph comes after All in the unicode definition.
res7: Boolean = true
string3: String = ∀אּ
string4: String = אּ∀
res8: Boolean = true
res9: Boolean = false
res10: Boolean = true
res11: Boolean = false