从模式生成URL的Java库

从模式生成URL的Java库,java,url,Java,Url,我想知道是否有免费的Java库可以自动执行以下过程: 1) 其中一个提供遵循特定模式的URL,例如 http://www.asite.com/path/to/something/thischange/alsothischange-andthischangetoo 其中,可以从上述字符串中指定: 此更改是在[0-10]范围内定义的整数 alsothischange是一个月,然后在集合{jan,…,dec}中 和dischangeToo是在[0-1000]范围内定义的整数 2) 给定一个模式,

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

http://www.asite.com/path/to/something/thischange/alsothischange-andthischangetoo
其中,可以从上述字符串中指定:

  • 此更改是在[0-10]范围内定义的整数
    
  • alsothischange
    是一个月,然后在集合{jan,…,dec}中
  • 和dischangeToo
    是在[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
...

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

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

你可以试试。它是RFC6570(URI模板)的一个实现。平心而论,我应该提到存在这样一个API,它有一个更好的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));
        }
//既然lib依赖于番石榴,那么最好使用它
最终列表月份=不可更改的列表月份(“一月”、“二月”、“等”);
//创建模板
最终模板
=新模板(“http://www.asite.com/path/to/something/{int1}/{month}-{int2}”);
//可变值
变量值int1,月,int2;
//扩展数据
地图数据;
//构建字符串

对于(int i1=0;i1)这大约是6行代码;您真的需要一个库来实现这一点吗?@OliCharlesworth您似乎忘记了URI模板(RFC 6570),请参阅我的answer@fge:我不确定这是否否定了我刚才的观点;)答案中的示例代码看起来很“复杂”就像你在纯Java中做这件事一样…@OliCharlesworth这是一个不重新发明轮子的问题;)存在RFC 6570,但有其实现;)如果不是我实施的话,我也会这样回答:p@OliCharlesworth我的只是一个例子,不是我真正的例子。我必须从输入文件加载多个模式,我更喜欢将代码集中在核心上,而不是实用程序库上:这是我的实用程序!这正是我想要的。为什么我应该实现很多代码,如果其他人已经这么做了!非常感谢。不客气;)这里真正的问题是RFC6570并不广为人知。。。而且实现起来很痛苦(我可以告诉你:p),所以,你可以找出我为什么要找一个库!