簡體   English   中英

使用>和在Scala中比較兩個字符串

[英]Comparing two Strings in Scala using > and <

我正在嘗試比較Scala中的兩個String,試圖找出字母表中的第一個。 ab之前, aababb之前,等等。

似乎><運算符正在完全完成此工作:

scala>“ b”>“ a”

res14:布爾值= true

scala>“ b” <“ a”

res15:布爾值=否

scala>“ aab” <“ abb”

res16:布爾值= true

但是,該文檔並沒有使我對它的真正作用有所啟發,並且在線上的所有教程似乎都沒有使用此方法來比較字符串。 因此,我想知道:

  • 這是執行我想要做的故障安全方法,即比較兩個字符串的字母順序嗎?

  • 我在這里缺少Scala中更常見的方法嗎?

  • 它是如何工作的-例如

scala>“?” >“!” res25:布爾值= true

對我來說不直觀

如您在文檔中所見,您可以對String使用已定義的> (以及所有其他)。 最終,這將String的元素分解為基礎Char並且它們是unicode。 因此,您需要比較它們的unicode值,以模擬標尺顯示的邏輯。

提到一個確定的清單,人們發現

U + 0021! 感嘆號

U + 003F? 問號

所以,的確是!<? true

我相信對於您可以提供的任何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

它是如何工作的

>和其他比較運算符委托給compareTo方法,該方法的確切行為在https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#compareTo(java.lang.String)中記錄 例如x > yx.compareTo(y) > 0

這是執行我想要做的故障安全方法,即比較兩個字符串的字母順序嗎?

不,它提供了一個命令,而不是字母一個,如果你把情況下(和變音符號,以及...)考慮在內。 例如, "b" > "A"為假。

對於完整的字母順序,您可能需要Collator (我還建議您閱讀https://english.stackexchange.com/a/212630/26340,以開始意識到這些規則對於英語而言甚至是不平凡的)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM