Java数组,按字母顺序从字符串数组中获取第一个单词

时间:2016-10-05 14:06:42

标签: java arrays sorting

我遇到的问题是关于大学的实验室工作问题,所以我想要的是从这里开始的一些指导。问题是提供一个代码片段,从中我们应该按字母顺序获取数组的第一个和最后一个元素:

public class NamesTest {
  public static void main(String[] args){
    // values hard-coded to facilitate testing
    String[] names = {"john", "mary", "andy", "beth", "chris",
                      "frank", "carol", "bob", "sue", "joe"};     
    System.out.println("first: " + getFirstAlphabetically(names));
    System.out.println("last: " + getLastAlphabetically(names));      
  }
}

预期产出:

  

首先:安迪
  最后:起诉

3 个答案:

答案 0 :(得分:1)

String实现Comparable<String>,其中排序是字典顺序(大致按字母顺序排列,但处理的不仅仅是字母字符)。

因此:

Collections.min(collectionOfStrings)

将在集合中返回按字典顺序排列的第一个字符串。

但你有一个数组:你可以使用List将其转换为CollectionArrays.asList(arrayOfStrings)}。

把它放在一起:

String firstAlphabetically = Collections.min(Arrays.asList(names));

同样,您可以使用Collections.max按字母顺序获取最后一个字符串。

您也可以在没有Collections或排序的情况下执行此操作:

String firstAlphabetically = names[0];
for (String name : names) {
  if (name.compareTo(firstAlphabetically) < 0) {
    firstAlphabetically = name;
  }
}

这在O(n)时间运行并且不会更改输入,而排序为O(n log n),要么您需要复制或更改输入数组。

答案 1 :(得分:1)

您可以使用Arrays.sort()对字符串数组names进行排序,然后获取第一项。

这样的事情:

String[] names = {"john", "mary", "andy", "beth", "chris",
                  "frank", "carol", "bob", "sue", "joe"};     
Arrays.sort(names);
String alphabeticallyFirst = names[0];
String alphabeticallyLast = names[names.length - 1];

答案 2 :(得分:0)

我假设这是一门入门级课程。基于这个假设,我认为他们的目标是让你自己对数组进行排序,然后获取排序数组的第一个和最后一个索引。如果您不能使用内置的Java库,请查看实现类似bubble排序的算法以对数组进行排序。请注意,您可以使用CompareTo方法比较两个字符串。