2016-10-10 1 views
-3

le programme est écrit pour convertir chaque première lettre du mot à UpperCasePourquoi la sortie du programme n'affiche pas chaque chaîne séparément après avoir obtenu UpperCased?

public class MainClass { 

    public static void main(String[] args) { 

     int i; 
     String toBeCapped=""; 

     String str[] ={"This is a ball","This is a bat","this is the wicket"}; 
     int e=str.length; 

     for(int j=0;j<e;j++) 
     { 
      String[] tokens = str[j].split("\\s"); 

      for(i = 0; i < tokens.length; i++) 
      { 
       char capLetter = Character.toUpperCase(tokens[i].charAt(0)); 

       toBeCapped += " " + capLetter + tokens[i].substring(1); 
      } 
      System.out.println(toBeCapped); 
     } 
    } 
} 

La sortie produite est aussi: -

This Is The Ball 
This Is The Ball This Is The Bat 
This Is The Ball This Is The Bat This Is The Wicket 

Je voulais que la sortie soit comme: -

This Is The Ball 
This Is The 
This Is The Wicket 

S'il vous plaît dites-moi quelle est l'erreur que je fais. Merci

+1

Vous avez défini 'toBeCapped' au mauvais champ d'application. Déplacez-le de trois lignes vers le bas, dans le corps de la boucle extérieure «for». –

Répondre

3

Le problème est que vous ne réinitialisez jamais toBecapped à "" dans la boucle après l'impression.

Ajout toBeCapped="" à la fin de la boucle après l'impression corrigera ce problème:

System.out.println(toBeCapped); 
toBeCapped=""; // <<== Add this line 

Notez que la concaténation de chaîne est relativement coûteux en Java. Une meilleure approche consiste à utiliser StringBuilder. See this Q&A pour une discussion approfondie de ce sujet.

+0

C'est aussi une bonne idée d'utiliser un ['StringBuffer'] (https://docs.oracle.com/javase/7/docs/api/java/lang/StringBuffer.html) si vous concaténez des chaînes. – doublesharp

+0

'StringBuffer' est toujours une bonne idée pour concaténer' Strings' car il donne moins de complexité de temps que la 'concaténation de chaîne normale.' –

+0

Merci bro.Aussi je voudrais vous demander comment je peux créer ce programme en utilisant StringBuffer? –

0

Voici le code problématique. Le += ajoute les caractères à une chaîne déjà construite toBeCapped. Vous devez définir la chaîne toBeCapped à un vide un après la boucle la plus interne for

for(i = 0; i < tokens.length; i++) 
{ 
    char capLetter = Character.toUpperCase(tokens[i].charAt(0)); 

    toBeCapped += " " + capLetter + tokens[i].substring(1); 
} 
System.out.println(toBeCapped); 
} 
toBeCapped = ""; 
0

Votre code a un problème car la variable toBeCapped est jamais remis à zéro après avoir été utilisé dans la boucle. Une bonne pratique de codage consiste à déclarer et utiliser des variables de boucle dans la boucle (non à l'extérieur de celui-ci)

public static void main(String[] args) { 
    String str[] ={"This is a ball","This is a bat","this is the wicket"}; 
    int e = str.length; 

    for(int j=0;j<e;j++) { 
    String toBeCapped=""; 
    String[] tokens = str[j].split("\\s"); 

    for(int i = 0; i < tokens.length; i++) { 
     char capLetter = Character.toUpperCase(tokens[i].charAt(0)); 
     toBeCapped += " " + capLetter + tokens[i].substring(1); 
    } 
    System.out.println(toBeCapped); 
    } 
}