Quelqu'un peut-il me dire comment écrire un programme Java pour inverser une phrase donnée?
Par exemple, si l'entrée est:
"Ceci est une question d'entrevue"
La sortie doit être:
"question interview an is this"
Vous divisez la chaîne par l’espace puis parcourez-la en arrière pour assembler la phrase inversée.
String[] words = "This is interview question".split(" ");
String rev = "";
for(int i = words.length - 1; i >= 0 ; i--)
{
rev += words[i] + " ";
}
// rev = "question interview is This "
// can also use StringBuilder:
StringBuilder revb = new StringBuilder();
for(int i = words.length - 1; i >= 0 ; i--)
{
revb.append(words[i]);
revb.append(" ");
}
// revb.toString() = "question interview is This "
String[] words = sentence.split(" ");
String[] reversedWords = ArrayUtils.reverse(words);
String reversedSentence = StringUtils.join(reversedWords, " ");
(utiliser ArrayUtils
et StringUtils
de commons-lang, mais ce sont des méthodes faciles à écrire - juste quelques boucles)
Juste être différent: une solution récursive. N'ajoute pas d'espaces supplémentaires.
public static String reverse(String s) {
int k = s.indexOf(" ");
return k == -1 ? s : reverse(s.substring(k + 1)) + " " + s.substring(0, k);
}
System.out.println("[" + reverse("This is interview question") + "]");
// prints "[question interview is This]"
Je vais aussi améliorer la solution split
en utilisant plutôt \b
(c'est tellement évident!).
String[] parts = "Word boundary is better than space".split("\\b");
StringBuilder sb = new StringBuilder();
for (int i = parts.length; i --> 0 ;) {
sb.append(parts[i]);
}
System.out.println("[" + sb.toString() + "]");
// prints "[space than better is boundary Word]"
Divisez-le simplement sur un caractère d'espacement en un tableau de chaînes, puis passez en boucle sur le tableau dans l'ordre inverse et construisez la chaîne de sortie.
String input = "This is interview question";
String output = "";
String[] array = input.split(" ");
for(int i = array.length-1; i >= 0; i--)
{
output += array[i];
if (i != 0) { output += " "; }
}
Bozho a déjà donné une excellente réponse spécifique à Java, mais si jamais vous avez besoin de résoudre ce problème sans les méthodes de l'API Java:
Pour inverser, vous pouvez simplement ajouter des mots individuels dans un stack
et les supprimer tous lorsqu'il ne reste plus de mots.
(Juste pour être très clair, Java fournit une Stack
classe , il est donc possible d'utiliser cette méthode également en Java).
J'essaye aussi: Voici une version utilisant une pile et un scanner:
String input = "this is interview question";
Scanner sc = new Scanner(input);
Stack<String> stack = new Stack<String>();
while(sc.hasNext()) {
stack.Push(sc.next());
}
StringBuilder output = new StringBuilder();
for(;;) { // forever
output.append(stack.pop());
if(stack.isEmpty()) {
break; // end loop
} else {
output.append(" ");
}
}
un peu ennuyeux de Java:
List<String> l = new ArrayList<String>(Arrays.asList("this is an interview question".split("\\s")));
Collections.reverse(l);
StringBuffer b = new StringBuffer();
for( String s : l ){
b.append(s).append(' ');
}
b.toString().trim();
en groovy c'est un peu plus lisible:
"this is an interview question"
.split("\\s")
.reverse()
.join(' ')
public class ReverseString {
public void reverse(String[] source) {
String dest = "";
for (int n = source.length - 1; n >= 0; n--) {
dest += source[n] + " ";
}
System.out.println(dest);
}
public static void main(String args[]) {
ReverseString rs = new ReverseString();
String[] str = "What is going on".split(" ");
rs.reverse(str);
}
}
Personne n'a encore mentionné de solution Java 8 basée sur Vanilla, identique à Bozho's , mais sans aucune bibliothèque tierce. Alors la voici:
String input = "This is interview question";
List<String> list = Arrays.asList(input.split(" "));
Collections.reverse(list);
System.out.println(list.stream().collect(Collectors.joining(" ")));
une approche plus agréable probablement .. avait vu la logique quelque part..il y a mon code qui pourrait faire le travail.
public class revWords {
public static void main(String[] args) {
revWords obj = new revWords();
String print = obj.reverseWords("I am God");
System.out.println(print);
}
public String reverseWords(String words)
{
if(words == null || words.isEmpty() || !words.contains(" "))
return words;
String reversed = "";
for( String Word : words.split(" "))
reversed = Word + " " + reversed;
return reversed;
}
}
s'il vous plaît essayer ci-dessous solution, cela fonctionne pour moi.
public class reverseline {
public static void main(String[] args) {
// TODO Auto-generated method stub
String str="This is interview question";
String words[]=str.split(" ");
for(int i=words.length-1;i>=0;i--){
System.out.print(words[i]+" ");
}
}
}
Je ne pense pas que vous devriez utiliser une bibliothèque .. 1) Inverser la chaîne entière 2) Inverser chaque mot.
public static void revWord(char[] a) {
// reverse whole
revWord(a, 0, a.length);
int st = -1;
int end = -1;
for (int i = 0; i < a.length; i++) {
if (st == -1 && a[i] != ' ') {
st = i;
}
if (end == -1 && a[i] == ' ' ) {
end = i;
}
if(i == a.length-1){
end=i+1;
}
if (st != -1 && end != -1) {
revWord(a, st, end );
st = -1;
end = -1;
}
}
}
public static void revWord(char[] a, int s, int l) {
int mid = (l - s) / 2;
l--;
for (int i = 0; i < mid; i++, l--) {
char t = a[s+i];
a[s+i] = a[l];
a[l] = t;
}
}
`
Réponse la plus courte
public class ReverseSentance {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter a sentance");
String inputString = sc.nextLine();
String[] words = inputString.split(" ");
List<String> reverseWord = Arrays.asList(words);
Collections.reverse(reverseWord);
Iterator itr = reverseWord.iterator();
while (itr.hasNext()) {
System.out.print(itr.next() + " ");
}
}
}
OU
public class ReverseSentance {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter a sentance");
String inputString = sc.nextLine();
String[] words = inputString.split(" ");
for (int i = words.length-1 ; i >= 0; i--) {
System.out.print(words[i] +" ");
}
}
Avant StringTokenizer était déclaré héritage, beaucoup utilisaient StringTokenizer pour cela. Je pensais simplement le laisser ici.
String sentence = "This is interview question";
String reversed = "";
StringTokenizer tokens = new StringTokenizer(sentence);
while (tokens.hasMoreTokens()) { // Loop through each token
reversed = tokens.nextToken() + ' ' + reversed; //add to start
}
System.out.println(reversed.trim());