作为compareTo()方法进行的字符串比较的概括:

对于两个给定的字母:


两个具有匹配值的字母,结果值为0。
如果给定字母在另一个给定字母之前到位,则两者的比较值为负。
如果给定字母的位置紧跟另一个字母,则两者的比较值将为正。


可以这样认为:


  按照26个英语字母的顺序,“ A”可以被视为索引1,而“ B”可以被视为索引2:
  
  因此,A = 1; B = 2。
  
  A-B = -1。


要达到值A,B必须减小1,或者B-1 = 1 =A。

例如:

  int result;

  String letterA = "a";
  String letterB = "b";

  result = letterA.compareTo(letterB);
  System.out.println("The difference between the letter \"a\" and the letter \"b\" will be equivalent to: " + result);


在考虑字符串时:

前两个字符的字母索引差(其沿各自字符串的字符串字符索引相等且字母索引不匹配)将是String.compareTo(String)方法返回的值(其中“字符串”代表广义字符串值) )。

例如:

  int result;

  String stringBA = "ba";
  String stringBD = "bd";

  result = stringBA.compareTo(stringBD);
  System.out.println("The difference between string \"ba\" and string \"bd\" will be equivalent to: " + result);


比较结果将为-3,因为该方法中最终比较的字母之间的差异是字符“ a”和“ d”,它们的字母索引分别为1和4。

可以这样说:要达到A的值,必须将D减少3,或者D-3 =A。


  可以认为这是准确的吗?

最佳答案

可以认为这是准确的吗?


这取决于您所说的准确。


作为规范,它是不完整的:


它仅处理“字母”字符和包含“字母”的字符串。相比之下,String.compareTo适用于任何代码点序列。
它不处理长度不相等的字符串,这些字符串的公共部分具有相同的字符子序列。

忽略规格中的漏洞,这是一个超规格。 String.compareTo的javadoc不能精确指定返回值是什么。它只是说它是零,负还是正。
忽略这些漏洞,看起来它是(至少)@ user3580294发现的compareTo实现的行为的适当模型。


javadocs给出了String.compareTo的实际规范。它是明确的和确定的。换句话说,没有必要重述它。

关于java - 用compareTo()方法比较Java字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23742932/

10-11 22:49
查看更多