Каков наилучший способ преобразовать подмножество строки в переменные массива? - PullRequest
0 голосов
/ 25 октября 2018

У меня есть строка, подобная этой;

abc 1/2/3 3/4/5 4/5/6 6/7/7 efg 1 2 3 4 ...

Я хочу преобразовать ее в;

String[] abc = {1/2/3, 3/4/5, 4/5/6, 6/7/7}
int[] efg = {1, 2, 3, 4}

, где abc, efg - переменные, НЕ закодированные жестко, но полученные из строки.Мой пример кода не работает, поэтому я не публикую его здесь.Пожалуйста, дайте мне знать, что является наиболее эффективным способом для достижения этой цели.Спасибо!

1 Ответ

0 голосов
/ 25 октября 2018

Вот рабочий скрипт, который очень близок к вашим заявленным требованиям.Он генерирует карту имен ключей, где значения массивов строк.Я не сопоставляю попытки сопоставить различные типы массивов, что просто добавляет сложности и, возможно, даже выходит за рамки того, что вы собираетесь делать с этим кодом.

Map<String, String[]> map = new HashMap<>();
String input = "abc 1/2/3 3/4/5 4/5/6 6/7/7 efg 1 2 3 4";
String[] exps = input.split("\\s+(?=[A-Za-z]+)");
for (String exp : exps) {
    String[] parts = exp.split("\\s+");
    map.put(parts[0], Arrays.copyOfRange(parts, 1, parts.length));
}

// iterate each name, and then print out each string in a given array
for (Map.Entry<String, String[]> entry : map.entrySet()) {
    for (String val : entry.getValue()) {
        System.out.println(entry.getKey() + ": " + val);
    }
}

abc: 1/2/3
abc: 3/4/5
abc: 4/5/6
abc: 6/7/7
efg: 1
efg: 2
efg: 3
efg: 4

Если вы хотите сделать карту более общей, вам, возможно, придется сопоставить имена строк с Object.Но мне это не кажется чистым, и я бы предпочел просто сопоставить каждое имя массиву того же типа.

Чтобы получить доступ, например, ко второму значению имени efg, вы быиспользовать:

map.get("efg")[1]
...