2013-07-19 53 views
1

我有一个程序,可以从命令行运行一个-R来指定返回结果的范围。 -R采取形式为n:n的一个参数。获得一系列结果的最佳方法是什么?

看到好像n:n可能是1-5或10000-500000,获得:两侧的值的最佳方法是什么?

通过我的ARG以下-R的方法后,我开始做了以下内容:

private int[] parseRangeResults(String range) { 
    int[] rangeResults = new int[2]; 

    if(!(range.contains(":"))) { 
     throw new Exception("Invalid range syntax"); 
    } 

    String[] numbers = range.split(":") 
    rangeResults[0] = Integer.parseInt(numbers[0]); 
    rangeResults[1] = Integer.parseInt(numbers[2]); 

    return rangeResults; 
} 

但我认为这打破了,如果有人提出特殊字符,或1000:::::5000,那么什么是解决这个的最佳方式?

+0

代码如果唯一的问题是,如果有人给垃圾输入它不会工作,我不知道这是一个问题 – StephenTG

+0

@StephenTG我慢,详细地谈一谈? –

+0

虽然现在我想,根据允许的范围,负值可能会有问题 – StephenTG

回答

3

如果这个regex("\\d*-\\d*")匹配,检查输入的最好方法是使用正则表达式,那么你的输出是正确的。这是你的函数

String regex = "(\\d*):(\\d*)"; 
    Pattern checkInput = Pattern.compile(regex); 

    Matcher matcherInput = checkInput.matcher(range); 

    if(matcherInput.matches()){ 
     rangeResults[1] = Integer.parseInt(matcherInput.group(1)); 
     rangeResults[2] = Integer.parseInt(matcherInput.group(2)); 



    } 
+1

这就是我说的意思,当我说错误输入的错误陷阱。我缺乏正则表达式的专业知识来实现​​这个魔术 – StephenTG

+0

或者我应该说regexpertise? – StephenTG

+0

这不起作用...我假设这是因为我的函数传递一个字符串,我试图对字符串进行正则表达式整数检查。 –

相关问题