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

Posted

技术标签:

【中文标题】验证数字和句点/小数的字符串【英文标题】:Verifying a String for Numbers and Periods/Decimals 【发布时间】:2016-02-16 10:25:28 【问题描述】:

我有这个简短的 sn-p 代码,我必须在其中检查一个字符串以查看它是否包含整数和可能的小数。该字符串是金额(12.34),所以它也不能超过第四个索引。

我的问题是有人告诉我使用charAt()(在我的代码中我使用了matches()contains(),这是错误的)来检查整数和小数,以便该例程返回一个布尔值,即如果字符串与这些参数一起使用,则为 true,但是我对如何将其转换为使用 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");
      
    

【问题讨论】:

你也许应该把它分成array = price.split(".") 并检查array[1].length == 2 是否如此你就知道它是有效的。 对 charAt 有要求还是只是一个建议?我还有很多其他方法可以做到这一点,只是想知道这些字符是否是课程的一部分...... “不能越过第四个索引”是什么意思?你的意思是小数点后最多可以有4位数字? --- 因为你没有提到它,所以假设 value 不能是负数是否正确? 查看您的代码,您似乎允许099999 之间的数字,但也允许.0000.9999,以及介于两者之间的任何数字,例如9.99999.999.999。这似乎不对。是你想要的吗?或者您的意思是说一个介于099.99 之间的数字,小数点后最多两位数? 如果任何解决方案有效,您能发表评论吗? 【参考方案1】:

我正在用手机输入这个。所以请原谅错误。您的教授是否要求您使用 charAt 而不是正则表达式和匹配项?

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

如果您需要检查没有千位数字,即 1.234,您能否发表评论?如果是,请确保

          inpString.substring       
              (inpString.lastIndexOf 
                 (".")).length < 3 

所有的 null 和 indexOutOfBounds 检查

【讨论】:

如果您使用拉丁文、中文等数字,这将不起作用,例如。 XV.II【参考方案2】:

这样怎么样?

导入 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");
    

【讨论】:

以上是关于验证数字和句点/小数的字符串的主要内容,如果未能解决你的问题,请参考以下文章

在 Google 表格中用逗号替换数字小键盘产生的小数点

试图从字符串中获取所有数值和句点

使用 VBA 将逗号小数转换为句点小数

从字符串中删除非数字字符(不包括句点和逗号)(即删除除数字、逗号和句点之外的所有字符)

验证字符串是否为数字(字符串能否转为整数或小数)

js验证文本框只能输入正整数或带一位小数的数,该怎么写呢?