Je crée une application dans laquelle vous pouvez modifier le nom de votre profil. Le problème est que les utilisateurs peuvent écrire leurs noms avec beaucoup d'espaces vides et je ne sais pas comment éviter ce problème. P>
(je vais représenter des espaces vides avec un soulignement "_") em> p>
Si quelqu'un écrit que sur un texte d'édition, des espaces vides vont être enregistrés, puis nous verrons ce grand nom dans le profil de l'utilisateur. P>
J'ai besoin d'un code capable de vérifier lorsque le texte d'édition a plus d'un (> 1 strong>) espaces vides d'affilée afin de les supprimer. Le code doit pouvoir détecter que "nom" em> doit avoir un espace vide après "Nom" EM> P>
3 Réponses :
Vous pouvez restreindre EditTtext à l'aide de TextWatcher de manière délicate.
Flux de travail pour le code ci-dessous P>
logique 2: strong> restreindre edittext pour permettre à un seul espace après Un caractère p> Logic 4: strong> Supprimer le changement de texte LIVER Avant de définir la valeur dans editext p> logique 6: strong> Ajoutez à nouveau le texte change de lister pour EditText p> Essayez le code ci-dessous. P> package com.example.application;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;
import androidx.appcompat.app.AppCompatActivity;
import com.example.myapplication.R;
public class SampleActivity extends AppCompatActivity {
EditText editText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sample);
editText = findViewById(R.id.editText);
editText.addTextChangedListener(textWatcher);
}
TextWatcher textWatcher = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
String preValue = editText.getText().toString();
/*
* To avoid empty space as a first character
* */
if (preValue.length() > 0 && preValue.trim().isEmpty()) {
editText.setText(preValue.substring(0, s.length() - 1));
editText.setSelection(editText.getText().toString().length());
}
/*
* Restrict EditText to allow only one space after a character
* */
if (preValue.endsWith(" ")) {
editText.setText(preValue.substring(0, s.length() - 1));
editText.setSelection(editText.getText().toString().length());
}
/*
* Restrict EditText to allow only one space for entire string
* */
if (preValue.trim().contains(" ") && preValue.endsWith(" ")) {
/*
* Remove Text Change Lister before setting value in editText
* */
editText.removeTextChangedListener(textWatcher);
/*
* Set proper value in editText
* */
editText.setText(preValue.substring(0, s.length() - 1));
editText.setSelection(editText.getText().toString().length());
/*
* Again add Text Change Lister for editText
* */
editText.addTextChangedListener(textWatcher);
}
if (preValue.contains("---") && preValue.endsWith(" ")) {
String[] words = preValue.split(" ");
if (words.length >= 2) {
editText.setText(preValue.substring(0, s.length() - 1));
editText.setSelection(editText.getText().toString().length());
return;
}
StringBuilder stringBuilder = new StringBuilder();
for (String word : words) {
stringBuilder.append(word).append(" ");
}
/*
* Remove Text Change Lister before setting value in editText
* */
editText.removeTextChangedListener(textWatcher);
/*
* Set proper value in editText
* */
editText.setText(stringBuilder);
editText.setSelection(editText.getText().toString().length());
/*
* Again add Text Change Lister for editText
* */
editText.addTextChangedListener(textWatcher);
}
}
@Override
public void afterTextChanged(Editable s) {
}
};
}
Je propose un type de solution différent de travailler avec des chaînes nues au lieu de l'EDITTTEXT. N'oubliez pas que cette réponse fonctionne en combinaison avec les autres réponses ici. La fonction statique ci-dessus prend une chaîne et supprime plusieurs espaces. Idéalement, vous utiliseriez cela lorsque le texte change ( voir la réponse de Divakar ) ou lorsque vous soumettez la valeur de l'EDITTEXT si vous le souhaitez p> p>
Utilisez Textwatcher comme décrit ici: Android: Comment puis-je valider l'entrée EDITTTEXT?
Puis dans OntextChanged (Chaluquerence S, INT START, INT, INT Count) Méthode de validation de l'utilisateur, voici l'exemple: P>
if (s.contains(" ")) { // ask user to edit input // or change text programatically String after = before.trim().replaceAll(" +", " "); // set new text }
Woww. C'est une méthode vraiment simple et utile que je ne savais pas jusqu'à présent. Merci beaucoup d'avoir aidé. Et merci à tous les autres qui ont essayé d'aider aussi.
Qu'avez-vous essayé? Avez-vous envisagé d'utiliser une regex pour vérifier s'il y a un espace consécutif dans la chaîne?
Je pensais pendant quelques minutes comment résoudre ce problème, mais je pense que je ne suis pas capable de résoudre ce problème. Je n'ai pas encore utilisé Regex. Je vais enquêter. Merci!
Voulez-vous remplacer ces multiples espaces entre les caractères ou restreindre l'utilisateur par validation pour inclure plus de 2 espaces?
Je veux limiter l'utilisateur d'utiliser plus d'un espace d'affilée.
Quelle langue préférez-vous pour votre réponse? De plus, vous ne devriez pas utiliser la balise code> Android-Studio CODE> si la question ou les réponses possibles n'est pas sur le studio Android (l'IDE)
J'utilise Java
Vérifiez si le nombre de "" dans une rangée est> 1. Si oui, supprimez-les tous. Ne laissez que des occurrences simples