我意識到string1.compareTo(string2)的結果將是一個數字-1或以下,如果string2在字符串1之前出現,並且數字1或以上,如果不同另一個方向。我只需要返回-1,0或1.如何最好地將String.compareTo()結果限制爲-1,0和1?
我可以用看似笨拙的方式對它進行編碼,但我覺得必須有一個更高效/更優雅的方式來做到這一點。任何幫助,將不勝感激!
String s1 = "aardvark";
String s2 = "zebra";
int c = s1.compareTo(s2); // -25
if (c > 0) {
c = 1;
} else if (c < 0) {
c = -1;
}
是否有某種數學運算,這將改變爲1所有正整數和所有負整數爲-1?
編輯:我不得不說,我很高興只是問,這不是downvoted和刪除的問題,但提示和智能響應是美妙的。這是我迄今測試的答案。我想和後來的人分享我的結果。
我的測試代碼:(運行約爲不同的值2600倍的每種溶液)
String s1 = "";
String s2 = "m";
for (int i = 0; i < 100; i++) {
for (char j = 'a'; j < 'z'; j++) {
s2 = ("" + j);
solution1(s1.compareTo(s2));
}
}
我原來的代碼:〜1.5毫秒
if (c > 0) {
c = 1;
} else if (c < 0) {
c = -1;
}
解決方案1:〜4ms的
c = (int) Math.signum(c);
解決方案2:〜2ms
c = c > 0 ? 1 : c < 0 ? -1 : 0;
解決方案3:〜2ms的
c = Math.max(-1, Math.min(1, c));
解決方案4:〜2ms的
c = Integer.compare(c, 0);
我都喜歡比我原來的更好,所以謝謝大家的統稱。解決方案4由於速度和可讀性而獲得複選標記,所以特別感謝您。
有'Math.signum'但是隻需要一個'float'或'double';使用它並鑄造你的'int',結果將不會比你已經做的更有效率。 – Jesper 2015-04-03 06:00:35
那麼在使用可比較的工具時,沒有更簡單的方法。使用可能需要重寫你的String類並指出什麼是更大的字符串?它是長度嗎?是字母順序嗎?使用可比較的工具,您將獲得小於/大於零的值。 – 2015-04-03 06:02:12
@Barak Kedem:字符串是最後一堂課。祝你好運,試圖覆蓋它 – Stultuske 2015-04-03 06:07:55