所以我有这个URL路径,该路径由“ /”分隔。 例: 强制网址路径:https://www.uni.it/it/ateneo-org_plot-pesc/organ/organi-amm/rettore-o_0-rect 分割路径如下:
it
ateneo-org_plot-
organ
organi-amm
rettore-o_0-rect
我想要的输出是:
it
ateneo
org
plot
organ
organi
amm
rettore
o
0
rect
我尝试过这样的事情:
public static List<String> extractAllWordsFromUrlPath(String link) {
List<String> splittedUrlPath = splitLinkPath(link);
List<String> urlWords = new ArrayList<String>();
if(splittedUrlPath!=null && splittedUrlPath.size()>0) {
Pattern linkWordsPattern = Pattern.compile("[-_]?[a-z]+[-_]?");
for(String sPath: splittedUrlPath) {
Matcher lwpm = linkWordsPattern.matcher(sPath);
while(lwpm.find()) {
urlWords.add(lwpm.group());
}
}
}
return urlWords;
}
答案 0 :(得分:1)
一种方法是在第一个路径分隔符之前删除URL的第一个组件。然后,在[/_-]
上分割剩余的字符串:
String url = "https://www.uni.it/it/ateneo-org_plot-pesc/organ/organi-amm/rettore-o_0-rect";
URL theURL = new URL(url);
String path = theURL.getPath();
String[] parts = path.split("[/_-]");
for (String part : parts) {
System.out.println(part + " ");
}
it ateneo org plot organ organi amm rettore o 0 rect
请注意,我使用java.net.URL
从输入URL中提取路径。我们也可以尝试通过正则表达式进行此操作,但是它可能容易出错或无法涵盖所有可能的URL类型。
答案 1 :(得分:1)
我提供了我的答案,重点是对您的代码的“最小”更改。请注意,此代码并不是真正的“生产就绪型”,并且绝对需要在许多部分上进行某些重新思考,包括静态方法的使用,处理异常等,但是对于您来说绝对是一个不错的原型(我想您的代码段是以及!)。它也是通过这种方式创建的,可让您轻松地通过代码进行调试。
public static List<String> extractAllWordsFromUrlPath(String link) throws MalformedURLException {
String path = new URL(link).getPath();
String regex = "[/_-]"; // set somewhere in config file, input as method argument?
String[] extractedWords = path.split(regex);
List<String> result = Arrays.asList(extractedWords);
return result.stream().filter(w -> (w != null && w.length() > 0)).collect(Collectors.toList());
}
方法返回List只是为了跟上您的决定。 请注意,流是Java 8的功能,并且该代码中可能会有一些过度设计的感觉,即,当您在确保列表中不包含空值String的情况下进行检查。 另外请记住, Arrays.asList()返回为不可变列表,以防万一您曾经使用它来转换数组以在代码的其他部分列出。
您可以使用其他方法中的for(String word : parsedWords )
解决方案来验证此代码,因此也可以将其与@Tim Bergenstein的解决方案结合使用,因此我也支持他的回答,它提供了很好的基础,我只是扩展了它可以处理空字符串,空值,快速异常处理和一些命名规范:
//code in your other method, of main class, just for testing
List<String> parsedWords = extractAllWordsFromUrlPath("http://www.google.com/asd/asd/dfg/kjg");
for(String word: parsedWords) {
System.out.println(word + " ");
}