所以我对java很陌生并且和我的班级挣扎......这就是我认为会起作用的:
double costPerKiloHr = 0; //sets value to 0
//tests to make sure a number was inputted
try {
costPerKiloHr = Double.parseDouble(
this.costPerKiloHrText.getText());
}
catch (Exception e) {
JOptionPane.showMessageDialog(this, "Please input a dollar amount including cents",
"Error", JOptionPane.ERROR_MESSAGE);
return;
}
答案 0 :(得分:0)
您可以使用正则表达式检查小数点后至少1个数值的匹配项。
String input = scanner.next();
Pattern pattern = Pattern.compile("[0-9]*\\.[0-9]+");
Matcher matcher = pattern.matcher(input);
if(matcher.matches()){
System.out.println("True");
}else{
System.out.println("False");
}
<强>输出强>
1.0 True
ASB False
0.25 True
1 False
答案 1 :(得分:0)
如果你不是法师或者smth,你不能让用户输入你想要的东西。但您可以编辑接受用户输入的代码。可能存在巨大差异:我不知道您使用什么作为输入。我注意到你正在使用JOptionPane
所以我猜你使用摇摆。
在摇摆中有JTextField
,你可以像这样控制它的内容:
final JTextField field = new JTextField();
field.addKeyListener(new KeyListener() {
StringBuilder buffer = new StringBuilder();
@Override
public void keyTyped(KeyEvent e) {
char c = e.getKeyChar();
if (Character.isDigit(c)) {
buffer.append(c);
}
}
@Override
public void keyPressed(KeyEvent e) {
}
@Override
public void keyReleased(KeyEvent e) {
field.setText(buffer.toString());
}
});
如果您使用InputStream
,则应将byte
对解释为chars
,然后过滤掉非数字值。这样就需要声明分隔符。
答案 2 :(得分:0)
假设您正在使用Swing(使用JOptionPane
进行安全下注),您可以让用户输入javax.swing.JFormattedTextField
...这是JTextField
的扩展名采用Formatter对象的小部件,该对象定义什么是可接受的和不可接受的。可以配置(通过Formatter.setAllowsInvalid(false)
)永远不要让用户键入无效字符串。
因此,任意正则表达式的格式化程序可能如下所示:
public class RegExFormatter extends DefaultFormatter {
protected Matcher matcher;
public RegExFormatter(String regex) {
setOverwriteMode(false);
Pattern p = Pattern.compile(regex);
matcher = p.matcher(""); // initial field contents
}
@Override
public Object stringToValue(String string) throws ParseException {
if (string == null || string.trim().equals(""))
return null;
matcher.reset(string);
if (!matcher.matches()) {
throw new ParseException("Input did not match regex", 0);
}
return super.stringToValue(string); // default returns this string; see docs!
}
}
然后你在代码中使用它:
String regex = "^[1-9]*[0-9](\\.\\d*)?$"; // change this to taste!
RegExFormatter ref = new RegExFormatter(regex);
ref.setAllowsInvalid(false);
JFormattedTextField field1 = new JFormattedTextField(ref);