[英]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.