Descrição
Guru deu uma tarefa para seus alunos. Ele deu uma frase, e os alunos têm que trocar a primeira e a última palavra e inverter todos os caracteres entre essas palavras. Ajude os alunos a resolver essa tarefa usando um programa Java.
Requisitos:
As palavras presentes na frase devem ser maiores que 2, caso contrário, imprima "Comprimento inválido"
A palavra deve conter apenas letras e espaços, caso contrário, imprimir " é uma frase inválida"
Observação:
Na entrada/saída de exemplo fornecida, o texto destacado em negrito corresponde à entrada fornecida pelo usuário, e o restante do texto representa a saída.
Certifique-se de seguir as especificações orientadas a objetos fornecidas na descrição da pergunta.
Certifique-se de fornecer os nomes das classes, atributos e métodos conforme especificado na descrição da pergunta.
Siga o modelo de código, se fornecido
Não use System.exit(0) para encerrar o programa.
Exemplos de entrada/saída. Todas as entradas são precedidas pelo promptEnter the sentence
Exemplo 1 :
Input:
Você usa sua máscara
Output:
mask ruoy raew uoy Do
Exemplo 2:
Input:
Leitor de cartão
Output:
Comprimento inválido
Exemplo 3:
Input:
Indique @ um amigo
Output:
Indique @ um amigo é uma frase inválida
import java.util.Scanner;
class SentenceProcessor {
// Method to check if the sentence is valid
public boolean isValidSentence(String sentence) {
return sentence.matches("[a-zA-Z ]+"); // Only alphabets and spaces allowed
}
// Method to process the sentence
public String processSentence(String sentence) {
if (!isValidSentence(sentence)) {
return sentence + " is an invalid sentence";
}
String[] words = sentence.trim().split("\\s+"); // Split by whitespace
if (words.length <= 2) {
return "Invalid Length";
}
// Swap first and last words
String firstWord = words[0];
String lastWord = words[words.length - 1];
words[0] = lastWord;
words[words.length - 1] = firstWord;
// Reverse middle words
for (int i = 1; i < words.length - 1; i++) {
words[i] = new StringBuilder(words[i]).reverse().toString();
}
return String.join(" ", words); // Join words with a space
}
}
public class UserInterface {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter the sentence");
String input = sc.nextLine();
SentenceProcessor processor = new SentenceProcessor();
String result = processor.processSentence(input);
System.out.println(result);
sc.close(); // Close the scanner to avoid resource leaks
}
}
Saída:-
Enter the sentence<br>
Do you wear your mask<br>
mask uoy raew ruoy Do<br>
Saída esperada:-
Enter the sentence<br>
Do you wear your mask<br>
mask ruoy raew uoy Do<br>
Tentei resolver isso, mas não estou conseguindo obter a saída desejada. Também tentei usar várias fontes abertas que não conseguiram me dar o código correto. Elas estão me dando repetidamente a mesma saída (como chatgpt, copilot).
Para obter o resultado desejado, você precisa trocar os elementos do seu array: a segunda palavra com a penúltima palavra, a terceira palavra com a antepenúltima palavra... e assim por diante. Talvez seja mais fácil usar
String.substring
o método para toda a tarefa em vez de dividir a entrada em um array:EDITAR
Para verificar se a string de entrada tem pelo menos três substrings separadas por espaços, ou seja, que a contagem de palavras > 2 modifique seu segundo método onde você faz sua validação. Fazendo isso, você separa a tarefa de processamento e validação.
Explicação da expressão regular:
^[a-zA-Z]+(\\s[a-zA-Z]+){2,}$
^
garante que a string comece com a primeira substring.[a-zA-Z]+
corresponde a uma sequência de letras (uma substring).(\\s[a-zA-Z]+)
corresponde a um espaço seguido por outra substring.{2,}
garante que haja pelo menos 2 substrings adicionais após a primeira.$
garante que toda a corda siga o padrão.Originalmente, pensei que seus requisitos não correspondiam a uma das suas saídas esperadas. Fui corrigido nos comentários.
Este método inverte a ordem das palavras em uma matriz e, em seguida, inverte cada palavra, excluindo a primeira e a última palavras.
Saída:
O erro está aqui:
o problema é que você inverte a ordem das letras das palavras centrais, mas não a ordem delas, podemos fazer assim:
O problema é que você está invertendo os caracteres de cada palavra. Mas você disse que deveria inverter todos os caracteres entre a primeira e a última palavra.
Supondo que as palavras do meio sejam
one two three
.Você está fazendo
eno owt eerht
.O que você quer é
eerht owt eno
.Então faça o seguinte: