用于提取命令行参数的 RegEx - Java
RegEx to extract command line arguments - Java
我知道那里有很多..但我不知道如何从 Scanner(System.in);
中提取两个参数
commandline = scanner.readLine();
允许两个参数:
第一个可以是AHG
之一或4到9之间的数字。
第二个参数又是 4 到 9 之间的任何数字。
它应该处理所有场景:
" A 3 " //spaces before and after
"A 3" // spaces between the params
"A 7 6" // Unwanted 3rd parameter
" 6 " // Only one param with spaces.
那么如何编写Regex来提取上面的内容呢?
我试过这个。 \w\s
。但这没有用。我不擅长 RegEx。
在 readLine()
返回的字符串上使用它:
String [] arguments = commandLine.split( "\s+" );
\s+
代表至少一个空白字符作为分隔符。
然后检查数组有多少个元素。
最后检查两个参数的格式
arguments[0].matches("\s*[AHG4-9]");
arguments[1].matches("\d");
尝试:
public static ArrayList<String> parseArguments(String argument){
Pattern regex = Pattern.compile("^\s*([AHG4-9])\s*(\d)?\s*$",
Pattern.CASE_INSENSITIVE | Pattern.MULTILINE);
Matcher regexMatcher = regex.matcher(argument);
if (regexMatcher.find()) {
ArrayList<String> arguments = new ArrayList<String>();
arguments.add(regexMatcher.group(1));
if(regexMatcher.group(2) != null)
{
arguments.add(regexMatcher.group(2));
}
return arguments;
}
return null;
}
根据您的输入:
它将打印:
[A,3]
以上正则表达式也强制执行参数规则。例如,正如您提到的,第一个参数可以是 A、H、G 或 4 到 9 之间的数字。第二个参数是任意数字,可以是可选的
我知道那里有很多..但我不知道如何从 Scanner(System.in);
commandline = scanner.readLine();
允许两个参数:
第一个可以是AHG
之一或4到9之间的数字。
第二个参数又是 4 到 9 之间的任何数字。
它应该处理所有场景:
" A 3 " //spaces before and after
"A 3" // spaces between the params
"A 7 6" // Unwanted 3rd parameter
" 6 " // Only one param with spaces.
那么如何编写Regex来提取上面的内容呢?
我试过这个。 \w\s
。但这没有用。我不擅长 RegEx。
在 readLine()
返回的字符串上使用它:
String [] arguments = commandLine.split( "\s+" );
\s+
代表至少一个空白字符作为分隔符。
然后检查数组有多少个元素。
最后检查两个参数的格式
arguments[0].matches("\s*[AHG4-9]");
arguments[1].matches("\d");
尝试:
public static ArrayList<String> parseArguments(String argument){
Pattern regex = Pattern.compile("^\s*([AHG4-9])\s*(\d)?\s*$",
Pattern.CASE_INSENSITIVE | Pattern.MULTILINE);
Matcher regexMatcher = regex.matcher(argument);
if (regexMatcher.find()) {
ArrayList<String> arguments = new ArrayList<String>();
arguments.add(regexMatcher.group(1));
if(regexMatcher.group(2) != null)
{
arguments.add(regexMatcher.group(2));
}
return arguments;
}
return null;
}
根据您的输入:
它将打印:
[A,3]
以上正则表达式也强制执行参数规则。例如,正如您提到的,第一个参数可以是 A、H、G 或 4 到 9 之间的数字。第二个参数是任意数字,可以是可选的