验证数字和句点/小数的字符串
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 不能是负数是否正确?
查看您的代码,您似乎允许0
和99999
之间的数字,但也允许.0000
到.9999
,以及介于两者之间的任何数字,例如9.999
、99.99
和9.999
。这似乎不对。是你想要的吗?或者您的意思是说一个介于0
和99.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");
【讨论】:
以上是关于验证数字和句点/小数的字符串的主要内容,如果未能解决你的问题,请参考以下文章