【问题标题】:Sort a sentence in Java without using an Array在不使用数组的情况下在 Java 中对句子进行排序
【发布时间】:2021-03-14 05:39:44
【问题描述】:

我希望能够排序一个句子样本输入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("==========================");
    }

}

【问题讨论】:

  • 为什么不想使用数组? String[] words = topLang.split(":");

标签: java loops while-loop


【解决方案1】:

最简单的方法是使用 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);

与上面的输出相同。

【讨论】:

    【解决方案2】:

    这是另一个使用 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());
        }
    }
    

    【讨论】:

      【解决方案3】:

      您可以使用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 如果您根本不想使用任何数据结构,您可以通过仅使用字符串来构建类似冒泡排序的排序算法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多