是否可以使用StringBuilder为输入设置确切的字符数?

时间:2016-08-20 10:04:54

标签: java input stringbuilder capacity

我希望能够使用StringBuilder强制输入10个字符。我知道它可以设置为最大字符限制,但我可以将其设为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); 
  }     
  }
  }

4 个答案:

答案 0 :(得分: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。基本上如名称所示,stringbuilder构建字符串!使用追加实际做你想要的东西可能是一种奇怪的方式,但这将是非常奇怪和非常糟糕的编程。我将添加一个你不该做的例子!

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,因为这很简单,但是对正则表达式做一些研究,是一个非常好的工具!

答案 1 :(得分: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); 
  }     
  }
  }

答案 2 :(得分: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", "");

仅供参考\D表示&#34;非数字&#34;。这种输入清理是每个输入字段在现实世界中应该具有的,但通常都不会。

答案 3 :(得分:0)

我的主要问题是我尝试输入用户并将其限制为10个字符。我最近发现从用户输入填充StringBuilder是不可能的。我可以在将其转换为字符串后对其进行修改,但我不能使用String Builder直接限制它。