是否有一个有效的Java URL生成器?

是否有一个有效的Java URL生成器?,java,url,generator,Java,Url,Generator,我需要生成有效的网址 示例:我传递url:google.com。发电机返回 有些浏览器会这样做。我试着做我自己的算法,但失败了 另一个例子:www.yadayada.com//测试返回 公共字符串generateValidURL(字符串url){ int pos=0; 试一试{ url=url.trim(); url=url.replaceAll(“,“%20”); if(url.startsWith(“http”)&&(!url.substring(4).startsWith(“:/”)){

我需要生成有效的网址

示例:我传递url:google.com。发电机返回

有些浏览器会这样做。我试着做我自己的算法,但失败了

另一个例子:www.yadayada.com//测试返回

公共字符串generateValidURL(字符串url){
int pos=0;
试一试{
url=url.trim();
url=url.replaceAll(“,“%20”);
if(url.startsWith(“http”)&&(!url.substring(4).startsWith(“:/”)){
对于(int i=4;i<7;i++){
if((url.charAt(i)='/')| |(url.charAt(i)==':')){
pos=i;
}
}
url=url.substring(位置+1);
}
if(url.startsWith(“https”)){
url=url.replace(“https”、“http”);
}
如果(!url.startsWith(“http”)){
url=“http://”+url;
}
如果(!url.substring(7).contains(“/”){
url+=“/”;
}
url=url.replace(“,”,“);
url=url。替换(“../”,“/”;
url=url.substring(0,7)+url.substring(7)。替换(“//”,“/”);
返回url;
}捕获(例外e){
System.out.println(“生成有效URL时出错:+e”);
返回null;
}
}

更新:现在,您想要实现的目标更加清晰了-我认为没有实用程序可以实现这一点。您的方法应该可以,只需调试它

原始答复:

URL url = new URL("http", domain, "/");
String output = url.toExternalForm();
实际上,您可能希望使用
URI
类:

URI uri = new URI("http", "google.com", "/test", null);
您可以使用
uri.resolve(“../relativePath”)
来解析它。但是请记住,您使用
/../test
=
/test
的示例是不正确的(您必须手动处理此情况)

正是这样做的-它根据一组预定义的约束生成有效的URL

例如:

MockNeat m = MockNeat.threadLocal();

m.urls()
  .scheme(HTTP) // all the URLS have a HTTP scheme
//.auth() -- can include auth information in the URL
  .domain(POPULAR) // only popular domain names can be used 
  .host(ADVERB_VERB) 
  .ports(80, 8080, 8090) // only the following ports can be used
  .list(10) 
  .consume(System.out::println);
将生成一个包含10个URL的列表,如下所示:

[http://www.tenthlyassays.net:8090, http://www.aflamecurr.io:8080, http://www.thirdlygirth.org:8080, http://www.foreprobates.net:8090, http://www.pokilyrile.org:80, http://www.cheerfullyapprizings.net:8090, http://www.whistlinglyunsettles.info:80, http://www.gratistrichinized.io:8080, http://www.sternwardssnuffle.gov:8090, http://www.yesterdaynix.edu:8090]
您可以在项目的wiki中找到文档


免责声明:我是此库的开发人员之一。

附加到URL的额外斜杠不是问题。请参阅已发布代码的现有答案@Vladimir。简短回答:使用URL类。还有其他的构造函数和函数,Bozho有点过于简洁,但关键是要看看这个类。
[http://www.tenthlyassays.net:8090, http://www.aflamecurr.io:8080, http://www.thirdlygirth.org:8080, http://www.foreprobates.net:8090, http://www.pokilyrile.org:80, http://www.cheerfullyapprizings.net:8090, http://www.whistlinglyunsettles.info:80, http://www.gratistrichinized.io:8080, http://www.sternwardssnuffle.gov:8090, http://www.yesterdaynix.edu:8090]