Обращение строкового массива в Java

1

Мне нужно сделать программу, которая принимает введенное пользователем предложение и отменяет его с правильным форматированием и пунктуацией.

Пример: Быстрая коричневая лиса прыгает через ленивую собаку.

РЕЗУЛЬТАТ: "Собака, ленивая, перепрыгивает из лисы коричневого цвета быстро".

Я видел решения для этого, и я могу получить правильный ответ, запросив у пользователя одно слово за раз. Однако мы специально попросили ТОЛЬКО запросить у пользователя предложение, а затем программа сделает все остальное. Таким образом, программа должна определить, насколько велик массив, и назначить каждому слову в строке значение в массиве (я предполагаю?).

Пока это то, что у меня есть, однако я считаю, что мне нужно использовать stringBuffer, но я не знаю, как это реализовать.

public class ReverseSentence {

    public static void main(String[] args) {






        String[] sentence = new String[]{IO.readString()};

        for(int counter = 0; counter < sentence.length; counter++){
            System.out.println("Enter Sentence"+(counter+1));
            sentence[counter] = IO.readString();
        }

        System.out.println("The Reversed Sentence is:");
        for(int counter = sentence.length - 1; counter >= 0; counter--){
            System.out.print(sentence[counter]);

        }





    }

}

Это не для домашнего задания, просто некоторые проблемы с практикой для предстоящего экзамена, поэтому полное решение будет в порядке, но если возможно, с комментариями, чтобы я мог видеть, как вы это сделали.

  • 0
    Что IO.readString() ? Одно слово или целое предложение?
Теги:
arrays

4 ответа

2
Лучший ответ

У вас две проблемы:

  1. отменить предложение
  2. капитализируя приговор

Давайте сделаем первый кулак:

public static String reverseSentence(final String sentence) {
    final Pattern pattern = Pattern.compile("[^A-Za-z']+");
    final List<String> words = pattern.splitAsStream(sentence)
            .map(String::toLowerCase)
            .collect(toList());
    final StringBuilder reversed = new StringBuilder();
    final ListIterator<String> i = words.listIterator(words.size());
    reversed.append(i.previous());
    while (i.hasPrevious()) {
        reversed
                .append(" ")
                .append(i.previous());
    }
    reversed.append(".");
    return reversed.toString();
}

Дважды проверьте код:

public static void main(String[] args) throws Exception {
    System.out.println(reverseSentence("The quick brown fox jumps over the lazy dog"));
}

собака ленивая над прыжками лиса коричневая быстро.

Хорошо, теперь нам нужно загладить первое слово:

public static String capitalise(final String name) {
    return name.substring(0, 1).toUpperCase() + name.substring(1).toLowerCase();
}

Нам просто нужно использовать этот метод для первого слова:

public static String reverseSentence(final String sentence) {
    final Pattern pattern = Pattern.compile("[^A-Za-z']+");
    final List<String> words = pattern.splitAsStream(sentence)
            .map(String::toLowerCase)
            .collect(toList());
    final StringBuilder reversed = new StringBuilder();
    final ListIterator<String> i = words.listIterator(words.size());
    reversed.append(capitalise(i.previous()));
    while (i.hasPrevious()) {
        reversed
                .append(" ")
                .append(i.previous());
    }
    reversed.append(".");
    return reversed.toString();
}

Проверьте его снова:

Собака ленивая над прыжками лиса коричневая быстро.

  • 0
    Буквально был в середине вопроса о двух других, как я буду осуществлять капитализацию. Здесь все выглядит отлично и прекрасно работает. Я собираюсь запустить это через отладчик несколько раз, чтобы полностью понять это. Огромное спасибо.
2

Вы можете попробовать следующее:

public static String reverseString(String input) {
     //from input to this method
     // split input with space and store words
     // in a collection if input is not empty
    Deque<String> words = new ArrayDeque<>();
    for (String word: input.split(" ")) {
        if (!word.isEmpty()) {
            words.addFirst(word);
        }
    }

      //now build output in reverse order of
      // addition to collection if input is not empty
    StringBuilder result = new StringBuilder();
    while (!words.isEmpty()) {
        result.append(words.removeFirst());
        if (!words.isEmpty()) {
            result.append(" ");
        }
    }
    return result.toString();
}
  • 0
    Это не правильно форматирует предложение.
  • 1
    @Bubletan: - Я думаю, что OP может добавить это. В любом случае, чтобы использовать заглавные буквы в первом слове строки, вам просто нужно добавить эту строку .... String output = input.substring(0, 1).toUpperCase() + input.substring(1);
0

Используйте Apache Commons StringUtils.

https://commons.apache.org/proper/commons-lang/

String result = StringUtils.capitalize(StringUtils.reverse(StringUtils.uncapitalize(basicString.substring(0,basicString.length()-1)))) + ".";
0

Попробуй это. Этот код даст вывод всех случаев формата, используя полную остановку (.). И внимательно прочитайте комментарий.

Scanner inp = new Scanner(System.in);

String s1 = inp.nextLine();
String s2[] = s1.split(" ");
boolean full_stop = false;
// Printing first character of last string in upper case
System.out.print(Character.toUpperCase(s2[s2.length - 1].charAt(0)));
// Printing rest of the character of last string
if (s2[s2.length - 1].contains(".")) {// checking that (.) is exists then print without (.)
    System.out.print(s2[s2.length - 1].substring(1,s2[s2.length - 1].length() - 1) + " ");
    full_stop = true;
} else {
    System.out.print(s2[s2.length - 1].substring(1, s2[s2.length - 1].length()) + " ");
}
for (int i = s2.length - 2; i >= 0; i--) {
    if (i > 0) {
        System.out.print(s2[i] + " ");
    } else {
        System.out.print(Character.toLowerCase(s2[i].charAt(0)));//converting first string character to lower case
        System.out.print(s2[i].substring(1,s2[i].length()));// last string must not have space after that
    }
}
if (full_stop) {// printing (.) if exists
    System.out.println(".");
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню