我有一个GPA程序,它使用equalsIgnoreCase()
方法比较两个字符串,字母"a"与用户输入进行比较,检查他们是否输入了"a"。但现在我想添加一个错误消息的异常处理机制,以便当用户输入数字时执行。我希望程序能够意识到整数输入与字符串不同并显示错误消息。我可以使用哪些方法来将类型为String的变量与int类型的输入进行比较,并抛出异常?
我有一个GPA程序,它使用equalsIgnoreCase()
方法比较两个字符串,字母"a"与用户输入进行比较,检查他们是否输入了"a"。但现在我想添加一个错误消息的异常处理机制,以便当用户输入数字时执行。我希望程序能够意识到整数输入与字符串不同并显示错误消息。我可以使用哪些方法来将类型为String的变量与int类型的输入进行比较,并抛出异常?
在http://www.coderanch.com/t/405258/java/java/String-IsNumeric上探讨了许多选项,其中之一是:
再来一个:
public boolean isNumeric(String s) {
return s != null && s.matches("[-+]?\\d*\\.?\\d+");
}
可能有些过度,但是Apache Commons NumberUtils似乎也有一些辅助工具。
123.
就成为有效输入(小数分隔符后面没有任何内容是有效输入)。 - peterhNumberUtils.isDigits(str:String):boolean
NumberUtils.isNumber(str:String):boolean
使用这个
public static boolean isNum(String strNum) {
boolean ret = true;
try {
Double.parseDouble(strNum);
}catch (NumberFormatException e) {
ret = false;
}
return ret;
}
简单方法:
public boolean isBlank(String value) {
return (value == null || value.equals("") || value.equals("null") || value.trim().equals(""));
}
public boolean isOnlyNumber(String value) {
boolean ret = false;
if (!isBlank(value)) {
ret = value.matches("^[0-9]+$");
}
return ret;
}
public static boolean isNumeric(String str)
{
try
{
double d = Double.parseDouble(str);
}
catch(NumberFormatException nfe)
{
return false;
}
return true;
}
如果你想使用正则表达式,可以按照以下方式进行:
public static boolean isNumeric(String str)
{
return str.matches("-?\\d+(\\.\\d+)?"); //match a number with optional '-' and decimal.
}
Double.parseDouble()
方法在国际化编程环境中并不可行。它在美国可能运行得相当好,但在其他国家具有有效双精度的数字字符串不一定能正确解析。例如,在某些地区,千位分隔符可以是空格 " ",而 "123 456" 将导致 NumberFormatException 错误,尽管它是一个可解析的数字。 - Kenny Wylandpublic static boolean isNumeric(String string) {
if (string == null || string.isEmpty()) {
return false;
}
int i = 0;
int stringLength = string.length();
if (string.charAt(0) == '-') {
if (stringLength > 1) {
i++;
} else {
return false;
}
}
if (!Character.isDigit(string.charAt(i))
|| !Character.isDigit(string.charAt(stringLength - 1))) {
return false;
}
i++;
stringLength--;
if (i >= stringLength) {
return true;
}
for (; i < stringLength; i++) {
if (!Character.isDigit(string.charAt(i))
&& string.charAt(i) != '.') {
return false;
}
}
return true;
}
private boolean isNumber(String text){
if(text != null || !text.equals("")) {
char[] characters = text.toCharArray();
for (int i = 0; i < text.length(); i++) {
if (characters[i] < 48 || characters[i] > 57)
return false;
}
}
return true;
}
public class CheckDigit {
private static Scanner input;
public static void main(String[] args) {
System.out.print("Enter a String:");
input = new Scanner(System.in);
String str = input.nextLine();
if (CheckString(str)) {
System.out.println(str + " is numeric");
} else {
System.out.println(str +" is not numeric");
}
}
public static boolean CheckString(String str) {
for (char c : str.toCharArray()) {
if (!Character.isDigit(c))
return false;
}
return true;
}
}
以下是如何检查输入是否包含数字的方法:
if (input.matches(".*\\d.*")) {
// there's a digit somewhere in the input string
}
Pattern.compile("[0-9]+").matches(string)
吗? - Louis Wasserman