从字符串中拆分最后两组id

时间:2014-06-06 02:43:47

标签: java

我有以下字符串

ford-focus-albany-ny-v12356-l12205

我正在尝试解析最后两组数字

1235612205

我正在使用前缀字母来定义id类型,因为这些int的顺序可能非常。

v = vehicle id "id length may very"
l = location id "id length may very"

我还想添加一个可能没有其他的存在。实施例

ford-focus-v12356albany-ny-l12205

我真的不确定动态分割字符串的最佳方法是什么,我最初的想法是找到最后两个 - 然后尝试从前缀解析int。有人有任何建议或可能的例子吗?

4 个答案:

答案 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));
        }
    }
}

这是demo on ideone

答案 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