当前位置: 首页 > 知识库问答 >
问题:

根据Java中的字符列表对单词列表进行排序

池恩
2023-03-14

我有:

List<String> alphabet; (contains 26 unique characters as elements, for example 
qwertyuiosapdfghjklzcxvbnm)

List<String> wordsToArrange; contains words as elements, for example: 

 - apple 
 - stream
 - posthouse
 - sea
 - seed

我需要根据我做的字母表排列单词。

我目前的方法是使用for cycles。

alphabet(i) compare it with all the words charAt(0)
if only 1 is found i put it to a new list arrangedList 

but if 2 is found i go alphabet(i+1) till the letter is found and now i can put them in a right order to arrangedList....

then move back to alphabet(i+1) till alphabet(26) and now all should be arranged correctly...

我已经为这段代码编写了一些基础,但在开始认真的“循环”之前,我想问一下还有什么其他方法

谢谢

后续更改Java中字符串列表中的特定字符

共有3个答案

华景同
2023-03-14

将字符串包装在一个实现可比的新类中怎么样?

可能是一些我没有测试过的边缘案例错误。

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class CompString {

    public static void main(String[] args) {
        List<ComparableString> list = new ArrayList<ComparableString>();

        list.add(new ComparableString("apple"));
        list.add(new ComparableString("stream"));
        list.add(new ComparableString("posthouse"));
        list.add(new ComparableString("sea"));
        list.add(new ComparableString("seed"));

        Collections.sort(list);

        System.out.println(list);
    }

}

class ComparableString implements Comparable<ComparableString> {

    String str;
    static String sortOrder = "qwertyuiosapdfghjklzcxvbnm";

    public ComparableString(String string) {
        str = string;
    }

    @Override
    public String toString() {
        return str;
    }

    @Override
    public int compareTo(ComparableString other) {
        for (int i = 0; i < Math.min(this.str.length(), other.str.length()); i++) {
            int thisOrder = ComparableString.sortOrder.indexOf(this.str.charAt(i));
            int thatOrder = ComparableString.sortOrder.indexOf(other.str.charAt(i));

            int order = thisOrder - thatOrder;
            if (order != 0) {
                return order;
            }

        }

        if (this.str.length() > other.str.length()) {
            return -1;
        } else if (this.str.length() < other.str.length()) {
            return 1;
        }
        return 0;
    }
}
沈凡
2023-03-14

我会使用Java8的过滤器和流过滤掉以某个字符开头的...然后我会对结果进行排序。如果它需要在一个数组中,然后组合结果。

import java.util.Arrays;
/**
 * Created by Brandon on 2016-04-17.
 */
public class Main {
    public static void main(String[] args) {

        String[] array = new String[]{"apple", "stream", "posthouse", "sea", "seed"};
        //char[] indices = new char[]{'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};
        char[] indices2 = new char[]{'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', 'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'z', 'x', 'c', 'v', 'b', 'n', 'm'};

        for (char key : indices2) {
            String[] result = Arrays.stream(array).filter(value -> value.charAt(0) == key).toArray(length -> new String[length]);

            if (result.length > 0) {
                Arrays.sort(result);
                System.out.println(Arrays.toString(result));
            }
        }
    }
}

如果使用索引,则结果为:

[apple]
[posthouse]
[sea, seed, stream]

如果使用表示2,则结果是:

[posthouse]
[apple]
[sea, seed, stream]
熊朝
2023-03-14

我会:

  • 将单词中的每个字母映射到字母表的“倒数”。例如:
    • 'a'是该字符串的第11个字母,因此将其映射到'k'
    • 'b'是该字符串的第24个字母,因此将其映射到'x'
    • 等等

 类似资料:
  • 问题内容: 我正在使用python 2.7.3,并且尝试根据另一个列表的值顺序对字典列表进行排序。 IE浏览器: 根据listOne中值的顺序对listTwo进行排序,结果如下: 我最终需要输出此文本,因此为正确显示(以正确的顺序)所做的工作如下: 是否有某种lambda表达式可用于实现此目的?必须有一种更紧凑,更简单的方法来按我想要的顺序来获取它。 问题答案: 最简单的方法是使用来为您的词典列表

  • 问题内容: 我有以下清单 我想根据其子列表的长度对列表进行排序。结果应为: 问题答案: 使用和中可用的参数。它指定一个参数的功能,该参数用于从每个列表元素中提取比较键

  • 问题内容: 我有一个这样的字符串列表: 使用Y中的值对X进行排序以获取以下输出的最短方法是什么? 具有相同“键”的元素的顺序无关紧要。我可以求助于for结构的使用,但我好奇是否有更短的方法。有什么建议么? 问题答案: 最短代码 例: 一般来说 解释: 两个。 创建一个新的,list基于zip使用排序sorted()。 使用列表推导从排序的,压缩的中提取每对的第一个元素list。

  • 我正在尝试编写一个程序,根据列表中最不频繁的字符排列字符串列表。例如,如果列表是,列表中的字母频率将是a-5,n-3,p-2,e-2,l-1,o-1,r-1,g-1,b-1。由于橙色包含最不频繁的字母,程序将返回橙色,然后是apple,然后是banana。 到目前为止,我已经编写了按频率排列列表中所有字母的代码。但我需要应用它来找出哪个字符串包含最不频繁的字母。 这是我的代码:

  • 示例: 我们的名单上有5个名字:凯文、汉斯、弗里茨、汉·索罗、彼得 我现在想要所有在顶部包含“han”的名字。 因此排序后的列表如下所示: Hans,Han Solo,Kevin,Fritz,Peter 到目前为止我所尝试的: 什么都没有,因为我没有线索,但我已经谷歌了,没有找到任何东西。 从列表中删除/添加项目不是一个选项,因为我正在使用(ControlsFX组件)中的列表,其中每个项目都具有会

  • 本文向大家介绍Python对字符串列表进行排序,包括了Python对字符串列表进行排序的使用技巧和注意事项,需要的朋友参考一下 在本教程中,我们将看到如何对字符串列表进行排序。我们将使用sort方法和sorted函数对给定的字符串列表进行排序。然后,我们将了解如何根据不同的条件(例如长度,值等)对字符串列表进行排序, 让我们看看如何使用list.sort方法对字符串列表进行排序。排序方法列表是一个