我需要按单词在模式数组中的顺序对字符串进行排序:
String[] pattern = {"Burger", "Fries", "Chicken", "Pizza", "Sandwich", "Onionrings", "Milkshake", "Coke"};
String s = "Chicken Coke Chicken Chicken Onionrings Coke Burger Milkshake Milkshake Burger Coke Milkshake Burger Onionrings Onionrings Coke Chicken Burger Fries Milkshake"; // input string
预计
"Burger Burger Burger Burger Fries Chicken Chicken Chicken Chicken Onionrings Onionrings Onionrings Milkshake Milkshake Milkshake Milkshake Coke Coke Coke Coke" // output string
您可以使用List
从单词中获取索引,然后使用这些索引对单词进行排序
- 获取单词的
List
以使其可索引 split
将您的String
放入一个数组中,以便能够对单词进行排序sort
基于它们在List
中的索引join
得到一个String
的单词
// INPUTS
String s = "Chicken Coke Chicken Chicken Onionrings Coke Burger Milkshake Milkshake Burger Coke Milkshake Burger Onionrings Onionrings Coke Chicken Burger Fries Milkshake";
String expect = "Burger Burger Burger Burger Fries Chicken Chicken Chicken Chicken Onionrings Onionrings Onionrings Milkshake Milkshake Milkshake Milkshake Coke Coke Coke Coke";
String[] pattern = {"Burger", "Fries", "Chicken", "Pizza", "Sandwich", "Onionrings",
"Milkshake", "Coke"};
// Get the patterns a list to get the indexOf method
List<String> listPatterns = Arrays.asList(pattern);
// Split in words
String[] values = s.split(" ");
//Sort base on index in list
Arrays.sort(values, Comparator.comparing(listPatterns::indexOf));
// Rebuild a string by joining
String result = String.join(" ", values);
// true
System.out.println(result.equals(expect));
由于问题不包含任何代码,我将只发布解决方案的粗略草图。
我会通过将String
拆分成单词列表来解决这个问题,然后使用Comparator
对这些单词进行排序,并用分隔空格将它们重新连接起来。
写入Comparator
s的一种常见方法是为相互比较的两个对象分配一个int
-值,从另一个对象中减去一个,并将其作为比较结果返回。
在Comparator
中,我会使用pattern
数组中相互比较的两个单词的索引作为比较的基础。
试试这个。
String[] pattern = {"Burger", "Fries", "Chicken", "Pizza", "Sandwich", "Onionrings", "Milkshake", "Coke"};
// make pattern to index map. {Burger=0, Fries=1, Chicken=2, ...}
Map<String, Integer> patternMap = IntStream.range(0, pattern.length).boxed()
.collect(Collectors.toMap(i -> pattern[i], Function.identity()));
// sort words using patternMap
String s = "Chicken Coke Chicken Chicken Onionrings Coke Burger Milkshake Milkshake Burger Coke Milkshake Burger Onionrings Onionrings Coke Chicken Burger Fries Milkshake"; // input string
String[] result = Arrays.stream(s.split("\s+"))
.sorted(Comparator.comparing(word -> patternMap.get(word)))
.toArray(String[]::new);
System.out.println(Arrays.toString(result));
输出:
[Burger, Burger, Burger, Burger, Fries, Chicken, Chicken, Chicken, Chicken, Onionrings, Onionrings, Onionrings, Milkshake, Milkshake, Milkshake, Milkshake, Coke, Coke, Coke, Coke]
这里有按字母顺序排列的代码
public class MainProgram {
public static void main(String[] args) {
String temp;
String[] pattern = {"Burger", "Fries", "Chicken", "Pizza", "Sandwich", "Onionrings", "Milkshake", "Coke"};
//Sorting the strings
for (int i = 0; i < pattern.length; i++)
{
for (int j = i + 1; j < pattern.length; j++) {
if (pattern[i].compareTo(pattern[j])>0)
{
temp = pattern[i];
pattern[i] = pattern[j];
pattern[j] = temp;
}
}
}
//Displaying the strings after sorting them based on alphabetical order
System.out.print("Strings in Sorted Order:");
for (int i = 0; i <= pattern.length - 1; i++)
{
System.out.print(pattern[i] + ", ");
}
}
}