我第16章的作业是这样的。
创建一个应用程序
接受用户输入的字符串或单词
按字母顺序打印每个单词
打印键入的元素总数
我到目前为止
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
public class Chapter16Assignment {
public static void main(String[] args){
Scanner input = new Scanner(System.in);
String userInput = "";
System.out.print(" Enter a line of words: ");
userInput = input.nextLine();
List<String> userString = Arrays.asList(userInput);
String[]userInput
//userString.add(userInput);
//.split
Collections.sort(userString);
System.out.println(userString);
//System.out.println("Frequency of words: " + Collection.frequency(userString));
}
}
我需要使用split或其他东西。我认为我可以在第3部分中使用排序方法和频率。
我希望输出是输入一行单词,然后按字母顺序打印这些单词,然后是单词数量。目前,它没有执行任何操作。它得到用户的输入。
最佳答案
这是您可以使用split方法将字符串转换为字符串数组的方法。
我不使用列表,因为我想向您展示一个略有不同的方法来解决此问题。
我正在删除空格并将所有内容都转换为小写。如果您要这样做,则取决于您。
Scanner input = new Scanner(System.in);
String userInput;
System.out.print("Enter a line of words: ");
userInput = input.nextLine().replace(" ", "").toLowerCase();
String[] userInputSplit = userInput.split(""); // Splits array
Arrays.sort(userInputSplit); // Sorts array
System.out.println(Arrays.toString(userInputSplit)); // Prints sorted array
// Checks for frequency of each letter using maps
Map<String, Integer> countMap = Arrays.stream(userInputSplit)
.collect(Collectors.toMap(Function.identity(), v -> 1, Integer::sum));
// Prints map
System.out.println("Frequency of words: " + countMap.toString());
输出:
Enter a line of words: The quick brown fox jumps over the lazy dog
[a, b, c, d, e, e, e, f, g, h, h, i, j, k, l, m, n, o, o, o, o, p, q, r, r, s, t, t, u, u, v, w, x, y, z]
Frequency of words: {a=1, b=1, c=1, d=1, e=3, f=1, g=1, h=2, i=1, j=1, k=1, l=1, m=1, n=1, o=4, p=1, q=1, r=2, s=1, t=2, u=2, v=1, w=1, x=1, y=1, z=1}
编辑:
就像@AndyTurner一样建议您也可以使用
Collectors.counting()
,这会使语法更易于理解,但它将返回Long而不是IntegerMap<String, Long> countMap = Arrays.stream(userInputSplit)
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
Collectors.counting本质上是
Map<String, Integer> countMap = Arrays.stream(userInputSplit)
.collect(Collectors.toMap(Function.identity(), v -> 1L, Long::sum));
使用HashSet和Collections.frequency:
HashSet<String> uniqueValues = new HashSet<String>(userInputList);
for (String value : uniqueValues) {
System.out.println("Frequency of " + value + " is: " + Collections.frequency(userInputList, value));
}