检查Java程序参数的函数
我正在尝试以更干净的方式重新编写此代码:检查Java程序参数的函数,java,arguments,Java,Arguments,我正在尝试以更干净的方式重新编写此代码: public static void main(String[] args) { if(checkArgs(args) < 0) return; return; } private static int checkArgs(String[] args) { if (args.length == 0) { System.out.println("Error: No Args");
public static void main(String[] args) {
if(checkArgs(args) < 0) return;
return;
}
private static int checkArgs(String[] args) {
if (args.length == 0) {
System.out.println("Error: No Args");
return -1;
}
try{ //If it's a number
int myNumber = Integer.parseInt(args[0]);
System.out.println("My number is: " + myNumber);
}
catch (Exception e) {//If it's a String
try{
String[] myStr = args ;
System.out.print("My String is ");
for (int i=0; i<args.length; i++) {
myStr[i] = args[i];
System.out.print(myStr[i]);
}
System.out.print("\n");
return 0;
}
catch(Exception err){
System.out.println("Error");
return -1;
}
}
return 0;
}
publicstaticvoidmain(字符串[]args){
if(checkArgs(args)<0)返回;
返回;
}
私有静态int checkArgs(字符串[]args){
如果(args.length==0){
System.out.println(“错误:无参数”);
返回-1;
}
如果是一个数字,请尝试{//
int myNumber=Integer.parseInt(args[0]);
System.out.println(“我的号码是:“+myNumber”);
}
catch(异常e){//如果是字符串
试一试{
字符串[]myStr=args;
System.out.print(“我的字符串是”);
对于注释中提到的(int i=0;i),您的代码存在编译问题。就逻辑而言,要确定输入字符串是否只包含数字,可以使用如下所示的正则表达式
Pattern p = Pattern.compile("^-?[0-9]+$");
if(p.matcher(arg[0]).matches()) {
System.out.println("It's a number!!");
} else {
System.out.println("Not a number.");
}
在这种情况下,您不必使用try/catch
块。像这样尝试
public class CheckArgs {
public static void main(String[] args) {
if (args != null && args.length != 0) {
for (String arg : args) {
System.out.println(String.format("<----- %s ----->", arg));
System.out.println(String.format("is number %s", checkIfNumber(arg)));
System.out.println(String.format("is string %s", checkIfString(arg)));
System.out.println(String.format("<-------------->", arg));
}
}
}
private static boolean checkIfString(Object arg) {
if (arg instanceof String) {
return true;
}
return false;
}
private static boolean checkIfNumber(Object arg) {
if (arg instanceof Integer) {
return true;
}
return false;
}
}
公共类CheckArgs{
公共静态void main(字符串[]args){
如果(args!=null&&args.length!=0){
for(字符串arg:args){
System.out.println(String.format(“,arg));
System.out.println(String.format(“是数字%s”,checkIfNumber(arg)));
System.out.println(String.format(“是字符串%s”,checkIfString(arg));
System.out.println(String.format(“,arg));
}
}
}
私有静态布尔checkIfString(对象arg){
if(arg instanceof String){
返回true;
}
返回false;
}
私有静态布尔checkIfNumber(对象参数){
if(arg instanceof Integer){
返回true;
}
返回false;
}
}
首先,您不需要第二个尝试…catch
。此代码:
String[] myStr = args ;
System.out.print("My String is ");
for (int i=0; i<args.length; i++) {
myStr[i] = args[i];
System.out.print(myStr[i]);
}
System.out.print("\n");
return 0;
将执行相同的操作,并且不会抛出异常
现在,对于检查整数,我认为像这样使用它并捕获异常就足够了。只需捕获NumberFormatException
而不是exception
。实现全面捕获从来都不是一个好主意
但如果你坚持一种方法而不尝试捕捉,你可以这样做:
private static boolean checkInt(String str) {
if ( ! str.matches("-?0*[0-9]{1,10}")) {
return false;
}
long l = Long.valueOf(str);
if ( l > Integer.MAX_VALUE || l < Integer.MIN_VALUE) {
return false;
}
System.out.println("My number is: " + myNumber);
return true;
}
如果没有它,请使用我的checkInt()
方法:
private static int checkArgs2(String[] args) {
if (args == null || args.length == 0) {
System.out.println("Error: No Args");
return -1;
}
if ( ! checkInt(args[0])) {
// If it's a String
String[] myStr = args;
System.out.print("My String is ");
for (int i = 0; i < args.length; i++) {
myStr[i] = args[i];
System.out.print(myStr[i]);
}
System.out.print("\n");
return 0;
}
return 0;
}
private static int checkArgs2(字符串[]args){
if(args==null | | args.length==0){
System.out.println(“错误:无参数”);
返回-1;
}
如果(!checkInt(args[0])){
//如果是字符串
字符串[]myStr=args;
System.out.print(“我的字符串是”);
对于(int i=0;i
不过,我不确定您的检查有多有用。通常,参数检查是在准备使用args执行某些操作时进行的,您不会将有关它是数字还是字符串的信息保存在任何位置。这里的方法中似乎有一个方法……事实上,这段代码根本不编译。它位于中的方法中t检查参数(字符串参数[])该方法本身也不会编译,无法访问最终的返回0;
。请给出实际编译和运行的代码。最好遵循一些约定,例如使用小写字母命名变量。提示:在尝试访问args[0]之前,还应检查数组是否包含任何元素
或其他。仅此一项是不够的。Integer.parseInt
如果值超出int
范围,也会引发异常,例如对于Integer.parseInt(“9999999999”)
,请参阅
private static int checkArgs1(String[] args) {
if (args == null || args.length == 0) {
System.out.println("Error: No Args");
return -1;
}
try { // If it's a number
int myNumber = Integer.parseInt(args[0]);
System.out.println("My number is: " + myNumber);
} catch (NumberFormatException e) {// If it's a String
String[] myStr = args;
System.out.print("My String is ");
for (int i = 0; i < args.length; i++) {
myStr[i] = args[i];
System.out.print(myStr[i]);
}
System.out.print("\n");
return 0;
}
return 0;
}
private static int checkArgs2(String[] args) {
if (args == null || args.length == 0) {
System.out.println("Error: No Args");
return -1;
}
if ( ! checkInt(args[0])) {
// If it's a String
String[] myStr = args;
System.out.print("My String is ");
for (int i = 0; i < args.length; i++) {
myStr[i] = args[i];
System.out.print(myStr[i]);
}
System.out.print("\n");
return 0;
}
return 0;
}