Сделать из String -> List<String>
Как конвертировать string такого формата ["junit", "tests", "cert"] в List с элементами junit, tests, cert
Источник: Stack Overflow на русском
Как конвертировать string такого формата ["junit", "tests", "cert"] в List с элементами junit, tests, cert
Такую конвертацию можно сделать разными способами, фактически это задача парсинга/сканирования строки.
Scanner::hasNext(String pattern)
/ Scanner::next(String pattern)
// шаблон слова - всё что внутри кавычек
public static List<String> match(String str) {
return Pattern.compile("\"([^\"]*)\"").matcher(str)
.results()
.map(mr -> mr.group(1))
.toList();
}
String::replaceAll
+ String::split
// убрать ненужные символы '[]"' и разбить по разделителю ', '
public static List<String> split(String str) {
return List.of(str.replaceAll("[\\[\\]\"]", "").split(",\\s"));
}
Pattern::splitAsStream
:public static List<String> split2(String str) {
return Pattern.compile(",\\s")
.splitAsStream(str.replaceAll("[\\[\\]\"]", ""))
.toList();
}
ObjectMapper::readValue
с указанием TypeReference
, чтобы получить список строк:import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
public static List<String> parse(String str) {
ObjectMapper om = new ObjectMapper();
try {
// сделает всю работу по чтению валидной JSON строки
return om.readValue(str, new TypeReference<>() {});
} catch (JsonProcessingException ex) {
throw new RuntimeException("Failed to parse list of strings from: " + str, ex);
}
}
Тесты:
public static void main(String args[]) {
String str = "[\"junit\", \"tests\", \"cert\"]";
print(split(str));
print(split2(str));
print(match(str));
print(parse(str));
}
static void print(List<String> lst) {
System.out.println(lst.size() + ": " + lst);
}
3: [junit, tests, cert]
3: [junit, tests, cert]
3: [junit, tests, cert]
3: [junit, tests, cert]