0
votes

Comment valider le texte avec beaucoup d'espaces vides?

Description:

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.

exemple:

(je vais représenter des espaces vides avec un soulignement "_")

Modifier votre nom: t_____omas_men____________i_ti //// (31 caractères)

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.

que veux-je?

J'ai besoin d'un code capable de vérifier lorsque le texte d'édition a plus d'un (> 1 ) espaces vides d'affilée afin de les supprimer. Le code doit pouvoir détecter que "nom" doit avoir un espace vide après "Nom"


7 commentaires

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 Android-Studio 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


3 Réponses :


1
votes

Vous pouvez restreindre EditTtext à l'aide de TextWatcher de manière délicate.

Flux de travail pour le code ci-dessous P>

  • Créez et ajout de TextWatcher à EditText. Est-ce que la logique à l'intérieur de la fonction ONTEXTCHANGED LI> ul>

    logique 1: strong> pour éviter l'espace vide en tant que premier caractère p>

    logique 2: strong> restreindre edittext pour permettre à un seul espace après Un caractère p>

    Logique 3: strong> restreint editext pour autoriser un seul espace pour une chaîne entière p>

    Logic 4: strong> Supprimer le changement de texte LIVER Avant de définir la valeur dans editext p>

    Logic 5: strong> Définir la valeur appropriée dans edittext 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) {
    
            }
        };
    }
    


0 commentaires

0
votes

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. XXX

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


0 commentaires

2
votes

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
}


1 commentaires

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.