Fazer combinação com caracteres de uma string

Olá comecei a programar a pouquíssimo tempo, esse é meu primeiro post, então não tenho muita familiaridade com os termos da programação…
Minha dúvida é a seguinte:
Eu quero pegar uma String com um texto dentro, dividir esse texto em caracteres e realizar todas as combinações possíveis(com repetição)
Até o momento o meu código pega a string e divide em caracteres, mas não sei fazer a combinação
segue o código:

String frase="testando frase";
       
        int qtd=frase.length();
        for(int i = 0; i < qtd; i++){
        listDeCaracteres = frase.substring(i);
        System.out.print(listDeCaracteres);
}
        
char vetor[] = frase.toCharArray();
for( int i = 0 ; i < qtd ; i++ ){  
    //System.out.print(vetor[i]);
}

um modo que eu encontrei para fazer a combinação é:


    String [] letras = new String[]{ "a" , "b" , "c", "d" };  
  String su="cba";
   
for( int i = 0 ; i < letras.length ; i++ ){  
   for( int j = 0 ; j < letras.length ; j++ ){  
      for( int k = 0 ; k < letras.length ; k++ ){  
          for( int p = 0 ; p < letras.length ; p++ ){  
          System.out.println("" + letras[i] + letras[j] + letras[k] + letras[p] );
      }  }
   }  
} 

porém, o numero de fors limita a quantidade de caracteres na combinação, e ainda por cima, ele não gera todas as combinações só as de 4 caracteres…
então se eu quiser fazer todas as combinações possíveis com os caracteres do primeiro código, como eu deveria fazer?(se possível dê um código exemplo pra facilitar o entendimento =))

veja se isto lhe ajuda:

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

public class Main {

public static void main(String[] args) {
		String frase = "abc";
		List<String> resultado = new ArrayList<String>();
		
		geraNovaPalavra(resultado, frase, frase.length(), "");
		
		for (String palavra : resultado) {
			System.out.println(palavra);
		}
		
		
	}
	
	public static void geraNovaPalavra(List<String> resultado, String palavra, int tamanho, String palavraAtual) { 
          String palavraCorrente = palavraAtual; 

          for (int i = 0; i < palavra.length(); i++) { 
              palavraCorrente += palavra.charAt(i); 

              if (palavraCorrente.length() >= tamanho) { 
                  resultado.add(palavraCorrente); 
                  palavraCorrente = palavraAtual; 
              } else { 
                  geraNovaPalavra(resultado, palavra, tamanho, palavraCorrente); 
                  palavraCorrente = palavraAtual; 
              } 
          } 
      } 
}

Novato25, seu código é melhor porque não usa for, mas ele não faz todas combinações possiveis, por exemplo pra
String frase=“ab”;
ele vai gerar
ab
ba

quando eu precisaria que gerasse:
a
b
ab
ba
mas ja ajuda bastante vlw =)

Veja se agora está de acordo:

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

public class Main {

	public static void main(String[] args) {
		String frase = "abc";
		List<String> resultado = new ArrayList<String>();
		
		geraNovaPalavra(resultado, frase, "");
		
		for (String palavra : resultado) {
			System.out.println(palavra);
		}
		
		
	}
	
	public static void geraNovaPalavra(List<String> resultado, String palavra, String palavraAtual) { 
          String palavraCorrente = palavraAtual; 

          for (int i = 0; i < palavra.length(); i++) { 
              palavraCorrente += palavra.charAt(i); 

              if (palavraCorrente.length() >= palavra.length()) { 
            	  resultado.add(palavraCorrente); 
                  palavraCorrente = palavraAtual; 
              } else { 
            	  resultado.add(palavraCorrente); 
                  geraNovaPalavra(resultado, palavra, palavraCorrente); 
                  palavraCorrente = palavraAtual; 
              } 
          } 
      } 
}

Sim funcionou muito obrigado =)

a resposta lhe serviu edite seu 1º topico com o titulo [RESOLVIDO]Fazer combinação com caracteres de uma string