Java 验证字符串是否为整数?
不热衷于使用Java 验证字符串是否为整数?,java,Java,不热衷于使用parseInteger解决方案,这很难看,正如Joshua Bloch所说的,您应该“仅在异常情况下使用异常”。当然,我可以使用下面的代码块,但不能保证它是整数 for (char c : str.toCharArray()) { if (!Character.isDigit(c)) return false; } return true; “仅在特殊情况下使用异常”是一个可以普遍遵循的良好实践,但这不是一个硬性规定。我认为这是使用异常优于替代方案的情况之一 由于pars
parseInteger
解决方案,这很难看,正如Joshua Bloch所说的,您应该“仅在异常情况下使用异常”。当然,我可以使用下面的代码块,但不能保证它是整数
for (char c : str.toCharArray())
{
if (!Character.isDigit(c)) return false;
}
return true;
“仅在特殊情况下使用异常”是一个可以普遍遵循的良好实践,但这不是一个硬性规定。我认为这是使用异常优于替代方案的情况之一
由于parseInteger()
可以返回任何可能的int
值,因此不能使用任何其他返回值来指示失败。如果知道永远不会处理特定值(例如-1
或-2147483648
),可以将其作为哨兵值返回以指示解析失败
唯一的替代方法是返回表示成功或失败的布尔值
,并将解析后的值存储到参数中。但是,由于函数调用在Java中始终是按值传递的,因此需要创建一个新类来执行此操作:
public class IntWrapper
{
int value;
}
...
public static boolean myParseInt(String s, IntWrapper outValue)
{
try
{
outValue.value = Integer.parseInt(s);
return true;
}
catch(NumberFormatException e)
{
return false;
}
}
...
IntWrapper value = new IntWrapper();
if (myParseInt(value))
{
// Use value.value
}
else
{
// Parsing failed
}
考虑到这些备选方案,我认为最简单的用法就是使用异常并适当地处理它们,即使非数字输入可能不是一个“异常”条件。我会将其保留为异常,但如果您确实希望解决方案无异常,您可以复制方法parseInt()使用java内部类从站点开始,并对其进行一点更改 (由于不需要结果,您可以再修改一点)
public static false isValidInt(字符串s,整数基数)
抛出NumberFormatException
{
如果(s==null){
返回false;
}
if(基数<字符最小基数){
返回false;
}
if(基数>字符最大基数){
返回false;
}
int结果=0;
布尔负=假;
int i=0,len=s.length();
int limit=-Integer.MAX_值;
int multmin;
整数位数;
如果(len>0){
char firstChar=s.charAt(0);
if(firstChar<'0'){//可能的前导“-”
if(firstChar=='-'){
负=真;
限制=整数.MIN_值;
}否则
返回false;
if(len==1)//不能有一个“-”
返回false;
i++;
}
multmin=极限/基数;
而(我
您可以使用:
public static boolean isInteger(String str) {
if (str == null) {
return false;
}
int length = str.length();
if (length == 0) {
return false;
}
int i = 0;
if (str.charAt(0) == '-') {
if (length == 1) {
return false;
}
i = 1;
}
for (; i < length; i++) {
char c = str.charAt(i);
if (c <= '/' || c >= ':') {
return false;
}
}
return true;
}
publicstaticbooleaninteger(stringstr){
如果(str==null){
返回false;
}
int length=str.length();
如果(长度==0){
返回false;
}
int i=0;
如果(str.charAt(0)='-'){
如果(长度==1){
返回false;
}
i=1;
}
对于(;i
这里已经回答了:但它不能保证它是一个整数。你能解释一下为什么吗?如果字符串仅为数字,则应将错误输入视为异常情况,我认为
Integer
,如32位整数,或整数,如可以用biginger
表示的任意整数?您可以重写parseInt()
方法以返回false
,而不是引发异常。这个方法很容易阅读。这对您来说是更好的解决方案吗?您所建议的或多或少是parseInteger
所做的。只需查看源代码并进行调整。
public static boolean isInteger(String str) {
if (str == null) {
return false;
}
int length = str.length();
if (length == 0) {
return false;
}
int i = 0;
if (str.charAt(0) == '-') {
if (length == 1) {
return false;
}
i = 1;
}
for (; i < length; i++) {
char c = str.charAt(i);
if (c <= '/' || c >= ':') {
return false;
}
}
return true;
}