繁体   English   中英

不使用数组对 Java 中的句子进行排序

[英]Sort a sentence in Java without using an Array

I want to be able to sort a sentence sample input Python:PHP:C++:C:Java:HTML

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

Output 应该是这样的;

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("==========================");
    }

}

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

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

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

Output

C
C++
HTML
Java
PHP
Python

与问题中的实现保持接近的替代方法是使用List 如果您根本不想要 arrays ,请使用像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);

与上述相同的 output。

这是另一个使用 PriorityQueue 和正则表达式的解决方案。

try (Scanner scanner = new Scanner(System.in)) {
    Queue<String> sortedLanguages = new PriorityQueue<>();
    System.out.print("Enter a list of the top programming languages: ");
    String input = scanner.next();
    Matcher matcher = Pattern.compile("[^:]+").matcher(input);
    while (matcher.find()) {
        sortedLanguages.add(matcher.group());
    }
    System.out.print("Top programming languages in alphabetical order:");
    for (int i = 1, size = sortedLanguages.size(); i <= size; i++) {
        System.out.printf("\n%d. %s", i, sortedLanguages.poll());
    }
}

您可以使用TreeSet数据结构来存储排序的字符串:

import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;

public class SortProgram {

    // Python:PHP:C++:C:Java:HTML
    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
        Set<String> languages = new TreeSet<>();
        while (topLang.length() > 0) {
            separator = topLang.indexOf(":");

            if (separator == -1) {
                separator = topLang.length() - 1;
            }

            holder = topLang.substring(0, separator);
            topLang = topLang.substring(separator + 1);
            languages.add(holder);
        }

        AtomicInteger position = new AtomicInteger(1);
        System.out.println("  Position Language");
        System.out.println("==========================");
        languages.forEach(language -> System.out.println(position.getAndIncrement() + ": " + language));
    }

}

o 也许如果您根本不想使用任何数据结构,您可以通过仅使用字符串来构建类似冒泡排序的排序算法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM