-2

我想知道是否有任何免费的 Java 库可以自动执行以下过程:1)提供一个遵循特定模式的 URL,例如

http://www.asite.com/path/to/something/thischange/alsothischange-andthischangetoo

其中一个从上面的字符串中指定:

  • thischange是定义在 [0-10] 范围内的整数;
  • alsothischange是一个月,然后在集合 {jan, ...., dec} 中;
  • andthischangetoo是在 [0-1000] 范围内定义的整数;

2) 给定一个模式,库生成所有可能的 URL,例如

http://www.asite.com/path/to/something/0/jan-0
http://www.asite.com/path/to/something/1/jan-0
http://www.asite.com/path/to/something/2/jan-0
...

显然,我可以自己开发代码,但如果有可用的东西会更好。

4

1 回答 1

3

免责声明:我是作者,但是...

你可以试试这个库。它是 RFC 6570(URI 模板)的实现。平心而论,我应该提到存在另一个实现,它有一个更好的 API 但更多的依赖项(我的只依赖于 Guava)。

假设您有变量int1, int2, month,您的模板将是:

http://www.asite.com/path/to/something/{int1}/{month}-{int2}

使用该库,您可以执行以下操作:

// Since the lib depends on Guava, might as well use that
final List<String> months = ImmutableList.of("jan", "feb", "etc");

// Create the template
final URITemplate template 
    = new URITemplate("http://www.asite.com/path/to/something/{int1}/{month}-{int2}");

// Variable values
VariableValue int1, month, int2;

// Expansion data
Map<String, VariableValue> data;

// Build the strings
for (int i1 = 0; i1 <= 10; i1++)
    for (final String s: months)
        for (int i2 = 0; i2 <= 1000; i2++) {
            int1 = new ScalarValue(Integer.toString(i1));
            month = new ScalarValue(s);
            int2 = new ScalarValue(Integer.toString(i2));
            data = ImmutableMap.of("int1", int1, "month", month, "int2", int2);
            // Print the template
            System.out.println(template.expand(data));
        }

重要说明:该.expand()方法返回 a String,而不是 aURI或 a URL。原因是 RFC 虽然保证了展开结果,但不能保证结果字符串实际上是一个 URI 或 URL。你必须自己把那个字符串变成你想要的。

于 2013-05-31T13:38:12.527 回答