2017-10-14 2 views
0

Une tâche a été définie pour convertir chaque caractère d'une chaîne en * sauf pour les espaces de cette chaîne (la chaîne est entrée par l'utilisateur), le seul inconvénient est que je dois utiliser une boucle for. Mon code est ci-dessous ... le problème actuel que je rencontre est que lorsque j'essaie d'utiliser le char dans une condition d'instruction if, j'obtiens une erreur "Type mismatch: impossible de convertir du char en booléen". Toute aide appréciée ...Java: comment convertir chaque caractère d'une chaîne en '*' à l'exception des espaces

public static void main(String[] args) { 
    //declare vars 
    Scanner input = new Scanner(System.in); 
    String name = ""; 
    int length = 0; 

    //get name string 
    System.out.println("Enter your name"); 
    name = input.nextLine(); 

    //get length of name string 
    length = name.length(); 

    //convert name string to array of characters 
    char[] nameChars = name.toCharArray(); 

    //iterate over array of chars replacing each 
    // char with * and space with space 
    for (int index=0;index==length;index++){ 
     //if the char is a space then do nothing 
     if (nameChars[index] = ' ') { 
     //else convert to * 
     } else { 
      nameChars[index] = '*'; 
     } 
    } 

    //convert array back to string and output 
    String newName = new String(nameChars); 
    System.out.println(newName); 

    //close resources 
    input.close(); 

} 
+0

'String newName = name.replaceAll (" \\ S "," * ")' –

Répondre

0

utilisation == en place de = pour la condition if vérifier que == est l'opérateur relationnel tout en = est l'opérateur d'affectation.

Remplacez index==length par index < length sinon votre boucle ne fonctionnera jamais! Initialement index = 0 alors que la longueur est une valeur positive et index!=length alors. Donc, la boucle ne fonctionnera jamais.

0

Vous devez utiliser == au lieu de = comme ci-dessous:

if (yourChar == ' ') { 
//your code ... 
} 
+0

Merci Atimene. Cela a résolu le problème d'origine, mais maintenant il ne fait que sortir la chaîne d'origine sans convertir les caractères en *. Pouvez-vous voir pourquoi? –

0

Au lieu d'écrire tout ce code, essayez ceci:

String newName = name.replaceAll("\\S", "*"); 

Le regex \S correspond à "tout de caractère non des espaces".

0

Essayez l'approche ci-dessous

if (nameChars[index] == ' ') { 
    //else convert to * 
    } else { 
     nameChars[index] = '*'; 
    } 
0

Si vous voulez utiliser votre code, votre état est mauvais, vous êtes ayant une incidence sur l'espace char à la char actuelle si la chaîne nameChars[index] = ' ' vous devez changer pour nameChars[index] == ' ' , notez le double signe égal ==.

Cependant, je vous suggère d'utiliser cette condition simple, parce que vous ne faites rien lorsque le char courant est un espace char, alors vous ne devez pas vérifier si elle est un caractère d'espace:

if (nameChars[index] != ' ') { 
      nameChars[index] = '*'; 
      } 
0

Pourquoi voulez-vous inventer un vélo?
Il est préférable d'utiliser la puissance de Java et exactement replaceAll méthode de String.class:

String input = "123 wer 456 zxcv!"; 
String result = input.replaceAll("[^ ]", "*"); 
System.out.println(result); 
0

Java: comment convertir chaque caractère dans une chaîne à « * » exception des espaces

Vous pouvez simplement le faire en une ligne sans boucles.

String str = pw.replaceAll("[^\\s]", "*"); 

TEST:

String str1 = "ASDAS sa[email protected]# [email protected]#^% ?".replaceAll("[^\\s]", "*"); 
System.out.println(str1); 

SORTIE:

***** ****** ***** * 

Note: Pour char[], vous pouvez utiliser String.valueOf (yourArray) .ReplaceAll() .

+1

votre solution est beaucoup mieux que la mienne, mais cela fait partie d'un exercice conçu pour nous faire utiliser des boucles et des tableaux, donc j'ai dû utiliser une boucle dans ma réponse. Merci pour la leçon cependant. –

0

String text = "C'est une chaîne"; System.out.println (text.replaceAll ("[a-zA-Z]", "*"));

La sortie pour le code sera "** ** * ******".

Notez qu'il est plus facile d'utiliser StringBuilder lorsque vous souhaitez modifier String. Vous devez vous rappeler que les chaînes sont immuables :)