java - 如何对从第一个字符开始的字符串数组进行排序?

标签 java

我想生成字符串的“子集”并按特定顺序打印输出。 例如,“rum”,我期望输出为 [rum, ru, rm, r, um, u, m] 我的代码如下,现在我的输出是 [rum, ru, rm, um, r, u, m]。如何更改我的代码以使其正常工作?

import java.util.*;
public class SubstringGenerator {
    String word;

    public SubstringGenerator(String x) { word = x;}

    public static void main(String[] args){
        SubstringGenerator a = new SubstringGenerator("rum");
        List b = a.subsets();
        Collections.sort(b, Collections.reverseOrder(Comparator.comparing(String::length)));
        System.out.println(b);
    }

    public List subsets(){
        ArrayList<String> subsets = new ArrayList<String>();
        int len = word.length();
        for (int i = 0; i < Math.pow(2,len); i++){
            String a = "";
            for (int j = 0; j < len; j++){
                if ((i & (int) (Math.pow(2,j))) > 0) a += word.charAt(j) + "";
            }
            subsets.add(a);
        }
        return subsets;
    }
}

最佳答案

我相信你的排列方法是保留它们全部,然后删除最后一个字母,然后删除倒数第二个,然后是最后两个,倒数第三个,倒数第三个和最后一个,最后三个,依此类推。

所以你所做的就是按长度排列数组列表元素。这不起作用,因为 r 比 um 短,因此将在后面。

我所做的是将子集排列如下:

我创建了一个二进制数来表示哪些字母被保留。数字“1”表示保留该位置的字符,而“0”则表示不保留。我重复了这个过程,从 111 开始一直到 001。

我希望这对您有所帮助,请询问您是否需要进一步的帮助。

import java.util.*;
import java.lang.Math; 
public class SubstringGenerator {
    String word;

    public SubstringGenerator(String x) { word = x;}

    public static void main(String[] args){
        SubstringGenerator a = new SubstringGenerator("rum");
        List b = a.subsets();
        System.out.println(b);
    }

    public List subsets(){
        ArrayList<String> subsets = new ArrayList<String>();
        int len = word.length();
        for (int i = (int)(Math.pow(2,len)-1.0); i >0; i--){
            String a = "";
            String b= Integer.toBinaryString(i);
            while(b.length()!=word.length()) b="0"+b;
            for(int j=0; j<b.length(); j++) if (b.charAt(j)=='1') a+=word.substring(j, j+1);
            subsets.add(a);
        }
        return subsets;
    }
}

关于java - 如何对从第一个字符开始的字符串数组进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59240331/

相关文章:

java - 执行器框架在性能测试中增加了大量时间?

java - 无法让 Maven 运行 JUnit 测试

Java 按子类型对对象进行分组

java - 如何在android中设置 "onItemSelected()"函数的延迟?

java - for循环变量声明中允许的类型?

java - 在 preparedStatement 中使用可变数量的参数

java - 对特定操作执行 MySQL 查询

java - 是否有一个普遍考虑的标准来确定 PermGen 和 Heap 空间之间的适当比例?

java - 部署到 Tomcat 时 Beans 中的 Log4j Logger NullPointerException

java - 使用 Spring Elasticsearch 数据存储库构建查询