[英]Comparing two Strings in Scala using > and <
我正在嘗試比較Scala中的兩個String,試圖找出字母表中的第一個。 即a在b之前, aab在abb之前,等等。
似乎>
和<
運算符正在完全完成此工作:
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 > y
與x.compareTo(y) > 0
。
這是執行我想要做的故障安全方法,即比較兩個字符串的字母順序嗎?
不,它提供了一個命令,而不是字母一個,如果你把情況下(和變音符號,以及...)考慮在內。 例如, "b" > "A"
為假。
對於完整的字母順序,您可能需要Collator
。 (我還建議您閱讀https://english.stackexchange.com/a/212630/26340,以開始意識到這些規則對於英語而言甚至是不平凡的)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.