Я предлагаю свой ответ с акцентом на «минимальные» изменения в вашем коде.Обратите внимание, что этот код на самом деле не «готов к работе» и, безусловно, требует определенного переосмысления множества частей, включая использование статических методов, обработку исключений и т. Д., Но, безусловно, будет отличным прототипом для вас (который, я полагаю, ваш фрагмент кодатакже!).Он также создан таким образом, чтобы вы могли легко отлаживать код.
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 , и в этом коде может возникать чувство чрезмерной инженерии, т. Е. Когда вы смотрите на деталь, чтобы убедиться, что список не содержит строку с нулевым значением.Также имейте в виду, что 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 + " ");
}