我有以下字符串
ford-focus-albany-ny-v12356-l12205
我正在尝试解析最后两组数字
12356
和12205
我正在使用前缀字母来定义id类型,因为这些int的顺序可能非常。
v = vehicle id "id length may very"
l = location id "id length may very"
我还想添加一个可能没有其他的存在。实施例
ford-focus-v12356
或albany-ny-l12205
我真的不确定动态分割字符串的最佳方法是什么,我最初的想法是找到最后两个 - 然后尝试从前缀解析int。有人有任何建议或可能的例子吗?
答案 0 :(得分:1)
String str = "ford-focus-albany-ny-v12356-l12205";
String[] substrings = str.split("-");
for (String arg: substrings) {
if (arg.matches("v[0-9]*")) {
String v = arg.substring(1);
}
else if (arg.matches("l[0-9]*")) {
String l = arg.substring(1);
}
}
答案 1 :(得分:1)
您可以使用regex表达式尝试并替换为:
//this will give you 12356
"ford-focus-albany-ny-v12356-l12205".replaceAll( "(.*)(-v)([^-]*)(.*)", "$3" );
//this will give you 12205
"ford-focus-albany-ny-v12356-l12205".replaceAll( "(.*)(-l)([^-]*)(.*)", "$3" );
//this will also give you 12356
"ford-focus-v12356".replaceAll( "(.*)(-v)([^-]*)(.*)", "$3" );
//this will give you 12205
"albany-ny-l12205".replaceAll( "(.*)(-l)([^-]*)(.*)", "$3" );
答案 2 :(得分:1)
您可以使用简单模式匹配其中一个或两个:
(?:-([vl])(\\d+))(?:-[vl](\\d+))?
这种模式背后的想法很简单:它匹配并捕获初始标记-v
或-l
,然后是一系列数字,这些数字被捕获到捕获组中。
Pattern p = Pattern.compile("(?:-([vl])(\\d+))(?:-[vl](\\d+))?");
for(String s : new String[] {"ford-focus-albany-ny-v12356-l12205","ford-focus-albany-ny-l12205","ford-focus-albany-ny-v12356"}) {
Matcher m = p.matcher(s);
if (m.find()) {
if (m.group(1).equals("v")) {
System.out.println("verhicle="+m.group(2));
String loc = m.group(3);
if (loc != null) {
System.out.println("location="+loc);
} else {
System.out.println("No location");
}
} else {
System.out.println("No vehicle");
System.out.println("location="+m.group(2));
}
}
}
答案 3 :(得分:0)
如何尝试使用String.split("-")
进行拆分,然后使用返回的数组,如下所示:
String[] result = longString.split("-");
// Get the last number
String lastPrefix = result[result.lenght-1].subString(0, 1);
// Here check the prefix
// try to get number
int lastNumber;
try {
lastNumber = = Integer.parseInt(result[result.lenght-1].subString(1));
} catch (NumberFormatException e) {
// Do something with exception
}
// And now do similar with result.lenght-2