Java 拆分<;端点1>&书信电报;终点2>;有效地使用Regex/Split()(?)
我目前正在开发一个用户界面,并且已经实现了命令Java 拆分<;端点1>&书信电报;终点2>;有效地使用Regex/Split()(?),java,regex,split,Java,Regex,Split,我目前正在开发一个用户界面,并且已经实现了命令addtrack-> 现在,我想实现命令addswitch->, 但是,我不知道如何有效地分割第三个参数(,) 这就是我使用addtrack命令所做的: 顺便说一句:点=(,)。parsePoint方法使用正则表达式检查模式“\(\d+,\d+\)” 所以我想创建另一个点pointsecondendpoint=newpoint(…)。我如何才能做到这一点(regex、.split(),…,?)。您可以在执行时使用split完成所有操作。但是,如果您想
addtrack->
现在,我想实现命令addswitch->,
但是,我不知道如何有效地分割第三个参数(,
)
这就是我使用addtrack
命令所做的:
顺便说一句:点=(,)
。parsePoint方法使用正则表达式检查模式“\(\d+,\d+\)”
所以我想创建另一个点
pointsecondendpoint=newpoint(…)端点2的代码>。我如何才能做到这一点(regex、.split(),…,?)。您可以在执行时使用split
完成所有操作。但是,如果您想更灵活地允许哪些内容作为输入,您可以允许用户更自由地使用或不使用空间。例如,可能允许用户以(123456)
的形式输入坐标。或者,->
运算符的两侧可能不需要空格。在这种情况下,可以使用一个正则表达式来识别完整的命令:
^\s*add\s+switch\s*(?:\(\s*(\d+)\s*,\s*(\d+)\s*\))\s*->\s*(?:\(\s*(\d+)\s*,\s*(\d+)\s*\))\s*,\s*(?:\(\s*(\d+)\s*,\s*(\d+)\s*\))\s*$
^\s*add\s+switch\s*
匹配字符串的开头,后跟0个或多个空格,后跟add
,后跟1个或多个空格,后跟switch
后跟0个或多个空格
(?:\(\s*(\d+)\s*,\s*(\d+)\s*)
坐标:A(
后跟0个或多个空格,后跟1个或多个数字,后跟0个或多个空格,后跟一个,
后跟0个或多个空格,后跟一个)
\s*->\s*
匹配0个或多个空格,后跟->
和0个或多个空格
(?:\(\s*(\d+)\s*,\s*(\d+)\s*)
匹配坐标
\s*,\s*
匹配0个或多个空格,后跟,
后跟0个或多个空格
(?:\(\s*(\d+)\s*,\s*(\d+)\s*)
匹配坐标
\s*$
匹配0个或多个空格,后跟字符串结尾
第一个坐标位于捕捉组1和2中,第二个坐标位于捕捉组3和4中,第三个坐标位于捕捉组5和6中
示例代码:
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class Test
{
public static void main(String[] args) {
String tests[] = {
"add switch(123,456)->(45,67),(8,100)",
" add switch (19 , 310) -> (21 , 890) , (1 , 2) "
};
for (String test: tests) {
Pattern pattern = Pattern.compile("^\\s*add\\s+switch\\s*(?:\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\))\\s*->\\s*(?:\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\))\\s*,\\s*(?:\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\))\\s*$");
Matcher m = pattern.matcher(test);
if (m.find()) {
for (int i = 0; i <= 6; ++i) {
System.out.println("Group " + i + " = " + m.group(i));
}
System.out.println();
}
}
}
}
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class Test
{
public static void main(String[] args) {
String tests[] = {
"add switch(123,456)->(45,67),(8,100)",
" add switch (19 , 310) -> (21 , 890) , (1 , 2) "
};
for (String test: tests) {
Pattern pattern = Pattern.compile("^\\s*add\\s+switch\\s*(?:\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\))\\s*->\\s*(?:\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\))\\s*,\\s*(?:\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\))\\s*$");
Matcher m = pattern.matcher(test);
if (m.find()) {
for (int i = 0; i <= 6; ++i) {
System.out.println("Group " + i + " = " + m.group(i));
}
System.out.println();
}
}
}
}
Group 0 = add switch(123,456)->(45,67),(8,100)
Group 1 = 123
Group 2 = 456
Group 3 = 45
Group 4 = 67
Group 5 = 8
Group 6 = 100
Group 0 = add switch (19 , 310) -> (21 , 890) , (1 , 2)
Group 1 = 19
Group 2 = 310
Group 3 = 21
Group 4 = 890
Group 5 = 1
Group 6 = 2