开发者社区> 问答> 正文

需要帮助以了解代码/ String方法,以按字母顺序从字符串数组返回第一个字符串

我在理解如何执行以下代码时遇到问题。您能帮我举一个1/2个例子吗?

代码是:

public class StringArray { public static String getFirstString(String[] values) { if (values.length == 0) { return ""; }

String result = values[0];
for (int i=1; i<values.length; i++) {
  if (result.compareTo(values[i]) > 0) {// i.e. result > values[i]
    result = values[i];
  }
}
return result;

}

public static void main(String[] args) { String[] nume= {"Andrei", "Andreea", "Andrea", "Marius", "Marcus", "Marcel", "Florin"}; System.out.println(getFirstString(nume)); } } 基本上,第一个项目是经过处理的吗?

首先是Andrei. Andrei 会进入第一个if?values.长度不应为7? 1.1“value”是参数的引用,应该指向main方法中给出的数组[]名称,对吧? 因此, Andrei 将被比作Andreea,但从这里,为什么Andrei 比Andreea大?我很难理解if(result.compareto(values[i])>0)。

展开
收起
小六码奴 2019-10-21 20:11:18 8965 0
1 条回答
写回答
取消 提交回答
  • 这里的关键要素是:理解compareTo()方法的“contract” 首先查看javadoc:

    按字典顺序比较两个字符串。比较是基于字符串中每个字符的Unicode值。在字典上比较此String对象表示的字符序列与自变量字符串表示的字符序列。如果此String对象在字典上在参数字符串之前,则结果为负整数。如果此String对象在字典上跟随自变量字符串,则结果为正整数。如果字符串相等,则结果为零;否则,结果为零。当equals(Object)方法返回true时,compareTo确切返回0。

    这是字典顺序的定义。如果两个字符串不同,则它们要么在某个索引处具有不同的字符(这是两个字符串的有效索引),要么它们的长度不同,或者两者都存在。如果它们在一个或多个索引位置具有不同的字符,则令k为最小索引;那么,在字符串位置k处的字符具有较小值(通过使用<运算符确定)的字符串,按字典顺序在另一个字符串之前。在这种情况下,compareTo返回两个字符串中位置k处两个字符值的差,即值:

    this.charAt(k)-anotherString.charAt(k)

    如果在它们之间没有索引位置不同,则较短的字符串在字典上在较长的字符串之前。在这种情况下,compareTo返回字符串长度的差-即值:

    this.length()-anotherString.length()

    2019-10-21 20:12:30
    赞同 1 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载