2016-08-20 3 views
0

J'aimerais pouvoir forcer une entrée de 10 caractères en utilisant StringBuilder. Je sais qu'il peut être réglé à une limite de char max mais puis-je le faire exactement 10?Est-il possible de définir un nombre exact de caractères pour une entrée en utilisant StringBuilder?

Peut-être quelque chose comme ceci:

import java.util.Scanner; 
public class Phonenumber 
{ 
public static void main(String[] args) 
{ 
    Scanner input = new Scanner(System.in); 
    StringBuilder num = new StringBuilder(System.in); 

    System.out.println("What is your 10 digit phone number?"); 
    num = input.nextStringBuilder(); 
    while(!(num =(10 characters)) // I don't know how to phrase this. 
    { 
    System.out.println("Sorry, you entered the wrong ammount of digits"); 
    } 
    if(num =(10 characters) 
    { 
    System.out.println("Your Phone number is " + num); 
    }  
    } 
    } 
+0

Pouvez-vous décrire l'arrière-plan de votre problème plus complètement? Quelle est la source de l'entrée de 10 caractères? –

+0

Voir aussi [* Comment tamponner une chaîne en Java? *] (Http://stackoverflow.com/q/388461/230513) – trashgod

+0

Si l'utilisateur souhaite entrer un numéro de téléphone, mais l'utiliser comme une chaîne et l'avoir seulement être accepté comme une entrée de 10 caractères –

Répondre

1
<input type="text" id ="idOfValueToTest" /> 
<input type="submit" id ="btnValidate" value="Submit" onclick="return Validate()" /> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js">  </script> 

<script type="text/javascript"> 
function Validate() { 
    var validation = document.getElementById("idOfValueToTest").value; 
    var pattern = /^\d{10}$/; 
    if (pattern.test(validation)) { 
     return true; 
    } 
    return false; 
} 
</script> 

Essayez ceci!

Je suis désolé j'ai mal lu java en javascript. L'expression rationnelle devrait fonctionner cependant. Essayez:

public static boolean isValid(String input) 
{ 
    String regex = "^\d{10}$"; 
    if(input.matches(regex)) 
    { 
    return true; 
    } 
    return false; 
} 

Salut, je vois ce que vous dites. Eh bien, comme d'autres l'ont dit, vous ne devriez pas utiliser stringbuilder pour le faire. Si vous cherchez des ressources, je vous suggère de lire la description de la classe ici: https://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html. Fondamentalement, comme son nom l'indique, un stringbuilder construit des chaînes! C'est peut-être une façon étrange de faire ce que vous voulez en utilisant append, mais ce serait une programmation vraiment bizarre et vraiment mauvaise. Je vais ajouter un exemple de ce que vous ne devriez pas faire!

String text = "abcdefghijklmnopq"; 
StringBuilder builder = new StringBuilder(); 
for (int i = 0; i < 10; i++) 
{ 
    builder.append(Character.toString(text.charAt(i))); 
} 
String result = builder.toString(); 
System.out.println(result); 

Voir ce que les autres personnes ont posté si vous cherchez une façon la plus couramment utilisée pour ce faire. Si regex semble compliqué alors je suggérerais d'aller avec .length car c'est assez simple, mais faire quelques recherches sur regex, est un très bon outil!

+0

Merci, mais je pose des questions sur le code Java. –

+0

Bien que cela puisse obtenir le résultat souhaité, merci, je demandais en fait si StringBuilder peut être utilisé pour cela. J'essaie d'apprendre sur les capacités du constructeur de chaîne. Je vais jouer avec ce code mais je pense qu'il est peut-être plus avancé que je ne peux le faire en ce moment. –

+0

Je l'ai essayé mais je ne sais pas comment l'utiliser correctement –

0

Mon problème principal était que j'essayais d'avoir une entrée de l'utilisateur et de la limiter à 10 caractères. J'ai récemment découvert qu'il est impossible de remplir un StringBuilder à partir de l'entrée de l'utilisateur. Je peux le modifier une fois qu'il a été converti en une chaîne, mais je ne peux pas utiliser String Builder pour le limiter directement.

+0

et StringBuilder n'a pas de limite, il a seulement une taille initiale du buffer, mais il s'étend automatiquement. – eckes

1

Meilleur alternative consiste à utiliser String au lieu d'utiliser la méthode StringBuilder et pour valider les entrées de l'utilisateur et votre code doit aussi une correction ..

import java.util.Scanner; 
public class Phonenumber 
{ 
public static void main(String[] args) 
{ 
    Scanner input = new Scanner(System.in); 
    //StringBuilder num = new StringBuilder(System.in); As we are using String,StringBUilder is not needed 

    System.out.println("What is your 10 digit phone number?"); 
    String num = input.nextLine(); 
    if(!(num.length()==10)) // Correction: If you use while here and user enters input not having 10 digits it will go to endless loop 
    { 
    System.out.println("Sorry, you entered the wrong ammount of digits"); 
    } 
    if(num.length()==10) //Here you can use else to make your code more appropriate in case of time complexity(Here Time complexity won't matter but as you seem to be new to java, I think you should check this property) 
    { 
    System.out.println("Your Phone number is " + num); 
    }  
    } 
    } 
1
String.length()

Essayez ceci:

System.out.println("What is your 10 digit phone number?"); 
String num = input.nextLine(); 
while (!num.matches("\\d{10}")) { 
    System.out.println("Sorry, you did not enter exactly 10 digits. Try again"); 
    num = input.nextLine(); 
} 

Ceci vérifie que la longueur est exactement 10 et que tous les caractères sont des chiffres.

Mais vous pouvez faire un pas de plus et de supprimer non chiffres si l'utilisateur est entré mise en forme des caractères (comme entre parenthèses, tirets et espaces), mais encore accepter l'entrée, en changeant le lit à:

input.nextLine().replaceAll("\\D", ""); 

FYI \D signifie "non chiffre". Ce type de nettoyage d'entrée est ce que chaque champ d'entrée devrait avoir dans le monde réel, mais tous ne le font pas souvent.