Esto es lo que actualmente he estado tratando de obtener un resultado como este:
input: this is a sentence output: a is this sentence import java.util.Scanner; Scanner input = new Scanner(System.in); System.out.print("Enter a sentance:"); String text = input.nextLine(); String[] words = text.split(""); String temp; for (int i = 0; i < words.length; i++) { for (int j = 0; j < (words.length - 1); j++) { if (words[j].compareTo(words[j + 1]) < 0) { temp = words[j]; words[j] = words[j + 1]; words[j + 1] = temp; } } System.out.print(words[i]); } } }¡Si alguien pudiera ayudar, sería genial!
Puede convertir la entrada en una lista y luego ordenar usando una lambda:
Scanner input = new Scanner(System.in); System.out.print("Enter a sentence:"); String text = input.nextLine(); List<String> words = Arrays.asList(text.split(" ")); words.sort(Comparator.comparingInt(String::length)); System.out.println(String.join(" ", words)); Esto imprime (para la entrada this is a sentence ):
a is this sentence@Test public void testSort() { Assertions.assertEquals("a is this sentence", sort("this is a sentence")); } private String sort(String sentence) { return Arrays.stream(sentence.split(" ")) .sorted(Comparator.comparingInt(String::length)) .collect(Collectors.joining(" ")); }// dividir palabras por espacio, luego ordenar por longitud y unir palabras nuevamente por espacio.