首页 > 解决方案 > 在不使用数组的情况下在 Java 中对句子进行排序

问题描述

我希望能够对句子样本输入进行排序Python:PHP:C++:C:Java:HTML

不使用数组或数组方法对句子进行排序。

输出应该是这样的;

Top programming languages in alphabetical order:
1. C
2. C++
3. HTML
4. Java
5. PHP
6. Python

这是我开始使用的,但被卡住了,在互联网上找不到任何不使用 Array 的东西。

import java.util.*;

public class SortProgram {
    public static void main(String[] args) {
        // Declare Variables
        String topLang = "";
        int separator = 0;
        String holder = "";
        String top = "";

        // Create a Scanner object attached to the keyboard
        Scanner input = new Scanner(System.in);

        // input
        System.out.print("Enter a list of the top programming languages: ");
        topLang = input.next();

        // separate each word
        while (topLang.length() > 0) {
            separator = topLang.indexOf(":");
            holder = topLang.substring(0, separator);
            topLang = topLang.substring(separator, topLang.length());
            
        }

        System.out.println("  Position Language");
        System.out.println("==========================");
    }

}

标签: javaloopswhile-loop

解决方案


最简单的方法是使用 Java 8 Stream API:

String topLang = "Python:PHP:C++:C:Java:HTML";

Pattern.compile(":").splitAsStream(topLang).sorted().forEach(System.out::println);

输出

C
C++
HTML
Java
PHP
Python

与问题中的实现保持接近的替代方法是使用List. 如果您根本不需要数组,请使用非数组列表实现,例如LinkedList.

String topLang = "Python:PHP:C++:C:Java:HTML";

List<String> result = new LinkedList<>();
int start = 0;
for (int end; (end = topLang.indexOf(':', start)) != -1; start = end + 1)
    result.add(topLang.substring(start, end));
result.add(topLang.substring(start));
Collections.sort(result);
for (String s : result)
    System.out.println(s);

与上面相同的输出。


推荐阅读