java - 在不使用数组的情况下在 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("==========================");
}
}
解决方案
最简单的方法是使用 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);
与上面相同的输出。