вывод предложения из самого короткого слова в самое длинное

#java

#Ява

Вопрос:

Это то, что я в настоящее время пытаюсь получить на выходе, как это:

 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 lt; words.length; i  ) {  for (int j = 0; j lt; (words.length - 1); j  ) {  if (words[j].compareTo(words[j   1]) lt; 0) {  temp = words[j];  words[j] = words[j   1];  words[j   1] = temp;   }  }  System.out.print(words[i]);  }  } }  

Если бы кто-нибудь мог помочь, это было бы здорово!

Комментарии:

1. Разделите строку на » «(пробел), чтобы разделить все слова, и отсортируйте ее с помощью массивов.сортировка(слова, (a, b)-gt;Целое число.сравните(a.длина(), b.длина ()));. Смотрите этот ответ для получения более подробной информации: !(здесь)[https ://stackoverflow.com/questions/35866240/how-to-sort-string-array-by-length-using-arrays-sort]

Ответ №1:

Вы можете преобразовать входные данные в список, а затем отсортировать их с помощью лямбда:

 Scanner input = new Scanner(System.in); System.out.print("Enter a sentence:"); String text = input.nextLine(); Listlt;Stringgt; words = Arrays.asList(text.split(" ")); words.sort(Comparator.comparingInt(String::length)); System.out.println(String.join(" ", words));  

Это печатает (для ввода this is a sentence ):

 a is this sentence  

Комментарии:

1. И добавьте вызов Stream#distinct , чтобы исключить дубликаты слов.

Ответ №2:

 @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(" "));  }  

// разделите слова пробелом, затем отсортируйте по длине и снова соедините слова пробелом.