Java 验证数字和句点/小数的字符串

Java 验证数字和句点/小数的字符串,java,string,if-statement,charat,Java,String,If Statement,Charat,我有一段简短的代码,我必须检查一个字符串,看看它是否包含整数,也可能包含十进制数。字符串是一个金额(12.34),因此不能超过第四个索引 我的问题是,有人告诉我使用charAt()(在我的代码中,我使用了matches()和contains(),这是错误的)来检查整数和小数,这样,如果字符串使用这些参数,这个例程将返回一个布尔值,然而,我对如何将其转换为使用charAt()而不是matches()和contains()感到困惑 同样,如果我格式化错误,或者措辞错误,或者代码看起来很糟糕,我很抱歉

我有一段简短的代码,我必须检查一个字符串,看看它是否包含整数,也可能包含十进制数。字符串是一个金额
(12.34)
,因此不能超过第四个索引

我的问题是,有人告诉我使用
charAt()
(在我的代码中,我使用了
matches()
contains()
,这是错误的)来检查整数和小数,这样,如果字符串使用这些参数,这个例程将返回一个布尔值,然而,我对如何将其转换为使用
charAt()
而不是
matches()
contains()
感到困惑

同样,如果我格式化错误,或者措辞错误,或者代码看起来很糟糕,我很抱歉,我正在上Java的第一个学期,这是我第一次上编程课,所以我有点粗糙

import java.util.Scanner;

public class Auction
{
    public static void main(String[] args)
    {
      Scanner keyboard = new Scanner(System.in);
      String price;
      String quantity;

      System.out.print("How much money are you willing to bet on this item?: $");
      price = keyboard.next();


      if(price.matches("[0-9]*") && price.length() <= 5)
      {
         Float f = Float.parseFloat(price);
         System.out.printf("$%5.2f", f);
         System.out.println();
      }

      else if(price.matches("[0-9]*") && price.length() <= 5 && price.contains("."))
      {
         Float f = Float.parseFloat(price);
         System.out.printf("$%5.2f", f);
         System.out.println();
      }

      else
      {
         System.out.println("Invalid input");
      }

      System.out.print("What quantity do you want to bid on?: ");
      quantity = keyboard.next();
      if(quantity.contains("."))
      {
         System.out.println("Invalid input");
      }
    }
}
import java.util.Scanner;
公开拍卖
{
公共静态void main(字符串[]args)
{
扫描仪键盘=新扫描仪(System.in);
串价;
串数;
System.out.print(“您愿意在这个项目上下注多少钱?:$”;
价格=键盘。下一步();
如果(price.matches(“[0-9]*”)&&price.length()

导入java.util.Scanner

公开拍卖{

private static final String numberRegex = "^\\d*(\\.\\d+)?$";
private static final String integerNumber = "^\\d*$";
private static final int MAX_LENGTH = 5;

public static void main(String[] args) {
    Scanner keyboard = new Scanner(System.in);
    String price;
    String quantity;

    System.out.print("How much money are you willing to bet on this item?: $");
    price = keyboard.next();

    if (price.length() <= MAX_LENGTH && price.matches(numberRegex)) {
        Float f = Float.parseFloat(price);
        System.out.printf("$%5.2f\n", f);
    } else {
        System.out.println("Invalid input");
        return;
    }

    System.out.print("What quantity do you want to bid on?: ");

    quantity = keyboard.next();
    if (!quantity.matches(integerNumber)) {
        System.out.println("Invalid input");
    }
}
private static final String numberRegex=“^\\d*(\\.\\d+)?$”;
私有静态最终字符串integerNumber=“^\\d*$”;
专用静态最终整数最大长度=5;
公共静态void main(字符串[]args){
扫描仪键盘=新扫描仪(System.in);
串价;
串数;
System.out.print(“您愿意在这个项目上下注多少钱?:$”;
价格=键盘。下一步();

如果(price.length()我是通过电话输入的。请原谅我的错误。你的教授是否要求你使用charAt而不是regex和matches

if (inpString!= null && !inpString.isEmpty () && inpString.length() <= 5){
   int periodCount = 0;
   for (int i=0; i  < inpString.length (); i++){  
      char c = inpString.charAt (i);
      if (c == '.'){
         periodCount++;
      }else if (c >= '0' && c  <= '9'){


      }else {
              System.out.println("invalid output");
              break;
      }
      if(periodCount > 1){
          System.out.println("too may periods. Invalid output"); 
          break;
      }


   }
}else { 
       System.out.println ("invalid input");
    }
if(inpString!=null&&!inpString.isEmpty()&&inpString.length()='0'&&c 1){
System.out.println(“太可能了。输出无效”);
打破
}
}
}否则{
System.out.println(“无效输入”);
}
如果您需要检查是否没有第千位数字,即1.234,您可以发表意见吗?如果是,请确认

          inpString.substring       
              (inpString.lastIndexOf 
                 (".")).length < 3 
inpString.substring
(inpString.lastIndexOf
(“)。长度<3

使用所有null和indexOutOfBounds检查

时,您可能只需通过
array=price.split(“.”)将其拆分,然后检查
数组[1].length==2
这样你就知道它是有效的。对charAt有什么要求,还是仅仅是一个建议?我有很多其他的方法可以做到这一点,只是想知道chars是否是课程的一部分……什么是“不能超过第四个索引”平均数?您的意思是小数点后最多可以有4位数字吗?---既然您没有提到,那么假设值不能为负数是正确的吗?查看您的代码,您似乎允许介于
0
99999
之间的数字,但也允许
.0000
.9999
之间的任何数字,以及介于两者之间的任何数字,例如e> 9.999
99.99
、和
9.999
。这似乎不对。这是你的本意吗?还是你的意思是说一个介于
0
99.99
之间的数字,小数点后最多有两位?你能评论一下这个解决方案是否有效?如果你使用拉丁语、汉语等数字,例如XV.II,这是行不通的