1
votes

Remplacement d'un espace vide par une chaîne

Dans cette classe, l'objectif est de créer une méthode qui remplace les espaces vides ("") dans une chaîne par le mot "comme". C'est ce que j'ai obtenu jusqu'ici; le problème que j'ai est que dans la méthode, si j'exécute cette méthode sur le fichier principal, mon programme n'exécute pas la méthode, comment puis-je résoudre cela?

public class Teen 
{
    private String firstName;
    private String lastName;
    private int grade;
    private Boolean textMessages;

   public Teen(String theFirstName, String theLastName, int theGrade, Boolean theTextMessages)
    {
        firstName = theFirstName;
        lastName = theLastName;
        grade = theGrade;
        textMessages = theTextMessages;
    }
    
    public String toString()
    {
        return firstName + " " + lastName + " is in grade " + grade + " and wants to send this 
        text:";
    }
    
    public String teenTalk(String text)
    {
   for(int i = 0; i<text.length(); i++)
    {
        String character = text.substring(i, i+1);
        if(character.equals(" "))
        {
            String front = text.substring(0, i);
            String back = text.substring(i+1);
            text = front + " like " + back;
        }
        if(!text.contains(" "))
        {
        text = text;    
        }
    }
        return text;
        
    }
    }



import java.util.Scanner;
public class TeenTester
{
    public static void main(String[] args)
    {
        Teen friend = new Teen("John", "Doe", 15, true);
        System.out.println(friend.toString());
        Scanner input = new Scanner(System.in);
        
        System.out.println("Enter the text message being sent:");
        String like = input.nextLine(); 
        System.out.println(friend.teenTalk(like));
    }
}


1 commentaires

C'est en quelque sorte ce que j'attends de la console. (Entrée utilisateur: je vais au magasin; sortie: j'aime j'aime aimer le magasin similaire).


3 Réponses :


1
votes

Remplacer l'opération dans la chaîne lorsque vous itérez cela poserait problème.

Utilisez la méthode replace de la chaîne

String alternative = text.replace(" ", " like ");


5 commentaires

Existe-t-il un autre moyen de le faire sans la méthode 'replaceAll ()'?


Eklavya - String # replaceAll prend une expression régulière comme premier argument. Vous devez utiliser String # replace .


@ZackC. vous pouvez utiliser StringBuilder pour le faire manuellement.


@ArvindKumarAvinash Cela fonctionnera également si vous avez raison


@ZackC. et votre approche actuelle est très inefficace (en utilisant une sous-chaîne à chaque fois) que replace .



1
votes

Pourquoi ne pas utiliser mieux la méthode statique replaceAll de la classe String?

    private String teenTalk(String text) {
        if (!text.contains(" ")) {
            text = text;
        }
        for (int i = 0; i < text.length(); i++) {
            String character = text.substring(i, i + 1);
            if (character.equals(" ")) {
                String front = text.substring(0, i);
                String back = text.substring(i + 1);
                text = front + " like " + back;
                i = i + 5;
            }
        }
        return text;
    }

Si vous souhaitez conserver votre logique en utilisant la méthode de sous-chaîne, vous devez également réattribuer la valeur de votre i index car la chaîne que vous parcourez sera modifiée.

public String teenTalk(String text) {
     return text.replaceAll(" ", "like");
}


0 commentaires

1
votes

Votre code actuel entraînera une boucle infinie s'il y a des espaces à remplacer, car la chaîne de remplacement contient également des espaces. Vous devez faire avancer l'index au-delà de la partie remplacée lors du remplacement. Voir le code ci-dessous en action ici .

return text.replace(" ", " like ");

Cependant, c'est extrêmement inefficace et vous feriez mieux d'utiliser String # replace .

public static String teenTalk(String text)
{
    for(int i = 0; i<text.length(); i++)
    {
        String character = text.substring(i, i+1);
        if(character.equals(" "))
        {
            String front = text.substring(0, i);
            String back = text.substring(i+1);
            text = front + " like " + back;
            i += " like ".length() - 1;
        }
    }
    return text;
}


1 commentaires

Cela ne fonctionnera pas dans certains cas comme 2 espaces en continu. Et félicitations pour 10K