У меня есть такая строка;
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 - переменные, НЕ жестко запрограммированные, а полученные из строки. Мой пример кода не работает, поэтому я не публикую его здесь. Пожалуйста, дайте мне знать, как лучше всего этого добиться. Спасибо!
Он содержит и то, и другое .. но это всегда имя переменной, за которым следуют четыре значения, которые должны быть частью этого массива или списка переменных.
Как насчет использования HashMap для сопоставления строки ("efg") со списком строк ({"1", "2", "3", "4"})? То есть, это было бы похоже на Map<String, List<String>> data - обратите внимание, что данные - это переменная, и обе "abc" и "efg" - записи в ней, и каждая запись представляет собой последовательность строк ... это отличается от псевдокода, который не Не много, потому что Java статически типизирована (и вопрос не предполагает генератора кода Java).
Спрашивать о выводе, содержащем массивы разных типов, - непростой вопрос. Считаете ли вы приемлемым вернуть строковые массивы Только?
Да, конечно, при условии, что я могу преобразовать строковое значение в правильный тип данных, когда я захочу его использовать, например, для арифметики.
Сформулируйте свой вопрос однозначно. Непонятно, о чем вы спрашиваете.
Привет @ user2864740 - возможно, у вас есть пример, как это сделать? Мне нужно использовать эти значения позже для арифметики, например, если они являются целыми числами - это единственное требование.
Привет @Behrang - перечитал, и в вопросе нет ничего двусмысленного. Понятно, что я пытаюсь создать разные типы данных из строкового значения, и что есть список элементов, которые необходимо назначить для этой переменной. У меня даже есть наглядный пример ввода и вывода.




Вот рабочий сценарий, который очень близок к вашим заявленным требованиям. Он генерирует карту имен ключей, где находятся значения массивов строк. Я не привязываю усилия для сопоставления с различными массивами типы, что просто добавляет сложности и, возможно, даже выходит за рамки того, что вы собираетесь делать с этим кодом.
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]
Привет спасибо. Если позже в коде я должен использовать значение 2 (например, efg [1]), как я могу ссылаться на это с карты?
Эта строка содержит текст, числа или и то, и другое?