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));
}
}
3 Réponses :
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 ");
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 .
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");
}
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;
}
Cela ne fonctionnera pas dans certains cas comme 2 espaces en continu. Et félicitations pour 10K
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).