2017-05-12 2 views
0
public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     String str = "Let's take LeetCode contest"; 
     reverseWords(str); 
    } 

    private static void reverseWords(String str) { 
     // TODO Auto-generated method stub 
     String[] words = str.split("\\s"); 
     String reverse = ""; 
     String word=""; 
     ArrayList<String> al = new ArrayList<String>(); 
     for(int i=0 ; i < words.length;i++){ 
      al.add(words[i]); 
      for(int j=al.get(i).length()-1;j>=0;j--){ 
       reverse=reverse+al.get(i).charAt(j); 
       word= reverse.replaceAll("..", "$0 "); 
      } 
     } 
     System.out.println(str); 
     System.out.println(word); 
    } 

Ce code distribuait mis: « s'teLekatedoCteeLtsetnoc »Comment imprimer l'espace entre les mots après avoir renversé une phrase de mots

Mais attendu devrait être de mettre sur: « s' teL ekat edoCteeL tsetnoc "

+0

Votre code ** ne produit pas ** ce que vous prétendez. Il sort '' 's' te Le ka te do Ct ee Lt se tn oc '' – Bohemian

Répondre

0
private static void reverseWords(String str) { 
    // TODO Auto-generated method stub 
    String[] words = str.split("\\s"); 
    String reverse = ""; 
    int len = words.length; 

    for(int i=0;i<len;i++){ 
     reverse = reverse+new StringBuilder(words[i]).reverse().toString(); 
     if(i<len-1){ 
      reverse = reverse+" "; 
     } 
    } 

    System.out.println(str); 
    System.out.println(reverse); 
} 

essayez celui-ci comme votre méthode reverseWords().

4

En fait, le code affiché et non produit la sortie que vous revendiquez; il sort "s' te Le ka te do Ct ee Lt se tn oc". Vous êtes (pour une raison quelconque) inversant des paires de lettres à la fois. Parfois, la meilleure approche consiste à écrire le code le plus simplement et le plus lisiblement possible. Voilà comment le faire en un seul (à mon humble avis lisible) ligne:

private static void reverseWords(String str) { 
    System.out.println(
     Arrays.stream(str.split(" "))  // split into words 
     .map(StringBuilder::new)   // use a StringBuilder for each word 
     .map(StringBuilder::reverse)  // reverse each word 
     .collect(Collectors.joining(" "))); // join em back up with spaces 
} 
+0

J'aime la ligne-par-ligne dans les commentaires. Je l'utilise aussi dans certaines réponses :) – CodingNinja

0
public class Reverse { 

    public static void main(String[] args) { 
     String str = "Let's take LeetCode contest"; 
     reverseWords(str); 
    } 

    private static void reverseWords(String str) { 
     char[] charArray = str.toCharArray(); 
     boolean flag = false; 
     int start = 0; 
     int end = 0; 
     for (int i = 0; i < str.length(); i++) { 
      if (charArray[i] == ' ' && !flag) { 
       flag = true; 
       end = i - 1; 
       reverseWord(charArray, start, end); 
      } 
      if (charArray[i] != ' ' && flag) { 
       start = i; 
       flag = false; 
      } 
     } 
     reverseWord(charArray, start, charArray.length - 1); 
     System.out.println(str); 
     System.out.println(String.valueOf(charArray)); 
    } 

    private static void reverseWord(char[] ch, int i, int j) { 
     while (i < j) { 
      char temp = ch[i]; 
      ch[i] = ch[j]; 
      ch[j] = temp; 
      i++; 
      j--; 
     } 
    } 
}