Можно ли установить точное количество символов для ввода с помощью StringBuilder?

java input stringbuilder capacity

498 просмотра

4 ответа

Я хотел бы иметь возможность принудительного ввода 10 символов с помощью StringBuilder. Я знаю, что можно установить максимальный предел символов, но могу ли я сделать его ровно 10?

Может быть, что-то вроде этого:

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); 
  }     
  }
  }
Автор: Ryan Martin Источник Размещён: 08.11.2019 11:09

Ответы (4)


1 плюс

Лучший альтернативный вариант - использовать String вместо StringBuilder и использовать метод String.length () для проверки ввода от пользователя, и ваш код также нуждается в некотором исправлении.

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); 
  }     
  }
  }
Автор: Sanket Makani Размещён: 20.08.2016 03:36

1 плюс

Попробуй это:

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();
}

Это проверяет, что длина равна 10 и что все символы являются цифрами.

Но вы могли бы пойти на шаг лучше и удалить нецифровые символы в случае, если пользователь ввел символы форматирования (такие как скобки, пунктир и пробелы), но все же принять ввод, изменив показания на:

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

FYI \Dозначает «не цифра». Этот вид очистки ввода - это то, что каждое поле ввода должно иметь в реальном мире, но часто это не так.

Автор: Bohemian Размещён: 20.08.2016 04:10

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>

Попробуй это!

Мне жаль, что я неправильно прочитал Java для JavaScript. Регулярное выражение должно работать, хотя. Пытаться:

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

Привет, я вижу, что ты говоришь. Ну, как говорили другие, вы не должны использовать stringbuilder для этого. Если вы ищете ресурсы, я бы предложил прочитать описание класса здесь: https://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html . Как следует из названия, строитель строк строит строки! Это может быть странный способ на самом деле делать то, что вы хотите, используя append, но это было бы действительно странным и действительно плохим программированием. Я добавлю пример того, что вы не должны делать!

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);

Посмотрите, что опубликовали другие люди, если вы ищете наиболее часто используемый способ сделать это. Если регулярное выражение кажется сложным, то я бы предложил использовать .length, поскольку это довольно просто, но проведем небольшое исследование регулярного выражения, это очень хороший инструмент!

Автор: Stelios Размещён: 20.08.2016 10:16

0 плюса

Моя главная проблема заключалась в том, что я пытался ввести пользовательский ввод и ограничить его до 10 символов. Недавно я обнаружил, что невозможно заполнить StringBuilder из пользовательского ввода. Я могу изменить его, как только он будет преобразован в строку, но я не могу использовать String Builder, чтобы напрямую ограничить его.

Автор: Ryan Martin Размещён: 20.08.2016 02:38
Вопросы из категории :
32x32