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,这是行不通的