2015-09-23 2 views
-3

У меня есть массив строк, как:Сделать иерархическое представление массива String в Java?

String arr[] = {"1", "1.1", "1.1.1", "1.1.1.1", "1.2", "2", "2.1", "3.3", "4", "7.3"}; 

, и я хочу сделать иерархическое представление об этом, так что результат будет, как:

[1] 
    [1.1, 1.2] 
      [1.1.1] 
       [1.1.1.1] 
[2] 
    [2.1] 
[3.3] 
[4] 
[7.3] 

Как сделать это? Использование рекурсии или? Строки отсортированы правильно.

Редактировать: Теги, подобные [3.3], [7.3] Я хочу быть на первом уровне. Если у меня есть 8.8.1.1.1 также, чтобы быть на первом уровне. Поэтому по этой причине я подумал, что с рекурсией будет возможно, но не сможет это сделать. Я не смотрю только для их печати, а затем для выполнения некоторой обработки с пользовательской логикой, поэтому хочу помещать их в иерархическую структуру и получать дочерние элементы с разных уровней. Я попытался с TreeSet, но из того, что я понимаю, внутренним представлением является Tree, но структура не имеет дочернего на втором уровне и так далее.

Здесь есть несколько корней, поэтому вместо дерева нам нужна структура данных «леса» или список с деревьями. Я не мог найти такого в Java API.

+0

вы просто хотите, чтобы распечатать или сделать некоторые обработки на нем? – YoungHobbit

+0

Я упрощаю вопрос, я хочу, чтобы затем обработать его, но сначала я должен сгруппировать их описанным образом. – Xelian

ответ

0

Hopw это выглядит для вас:

public void test() { 
    String arr[] = {"1", "1.1", "1.1.1", "1.1.1.1", "1.2", "2", "2.1", "3.3", "4", "7.3"}; 
    for (String s : arr) { 
     int partsCount = s.split(Pattern.quote(".")).length; 
     for (int i = 0; i < partsCount; i++) { 
      System.out.print(" "); 
     } 
     System.out.println("[" + s + "]"); 
    } 
} 

Это не делает именно то, что вы хотите - это не делает в [1.1,1.2], который не имеет смысла, но похоже, что он делает правильно отступов.

печатает:

[1] 
    [1.1] 
     [1.1.1] 
     [1.1.1.1] 
    [1.2] 
[2] 
    [2.1] 
    [3.3] 
[4] 
    [7.3] 
+0

Спасибо за ответ, но я хочу, чтобы [3.3] [7.3], [9.1.1.2.3.4] был на первом уровне. – Xelian

0

Вы можете создать Map из данных. Key будет префикс (первый символ из числа) и number of decimal в количестве и value будет списком всех ваших входных данных. Вы можете использовать PriorityQueue, если вам нужны значения в отсортированном порядке.

HashMapM<String, List<Double>> 
HashMapM<String, PriorityQueue<Double>> 

Для извлечения данных из этого Map, вы можете захотеть сохранить PriorityQueue ключей. Таким образом, вы можете получить доступ к значениям из Карты по порядку.

Карта будет, как (не будет заказана в памяти)

1#0 1 
1#1 1.1, 1.2 
1#2 1.1.1 
1#3 1.1.1.1 

PriorityQueue:

1#0, 1#1, 1#2, 1#3 
+0

Извините, но я не могу понять. – Xelian

+0

какую часть вы не поняли? – YoungHobbit

Смежные вопросы