2016-05-22 3 views
0

У меня есть текстовый файл, и я пытаюсь его прочитать в хэш-карту. Моя проблема в том, что я пытаюсь использовать слова в качестве ключей. Я искал вокруг и не могу найти решение.Прочитайте текстовый файл на карте хэша со словами как ключи

Так в основном, если у меня есть текстовый файл, который содержит "text.txt" это: "This is a sentence." я хочу сделать HashMap слов, где первый ключ "This" и значение {"is", "a", "sentence."}. И затем следующий ключ: "is" со значениями {"a", "sentence."} и так далее, пока каждое слово не будет использовано в качестве ключа.

+3

Что происходит, когда вы столкнулись второй «Это» в текстовый файл? Кроме того, вы должны удалить все знаки препинания и сделать все слова строчными. –

ответ

1

Вы могли бы сделать что-то вроде этого:

String input = "This is a sentence."; 
String[] split = input.split(" "); 
Map<String, String[]> map = new HashMap<>(split.length - 1); 
for (int i = 0; i < split.length - 1; i++) { 
    int remainderLength = split.length - 1 - i; 
    String[] remainders = new String[remainderLength]; 
    System.arraycopy(split, i + 1, remainders, 0, remainderLength); 
    map.put(split[i], remainders); 
} 

Разделить строку на пространствах, не перебрать до последней, и поместить записи в HashMap.

Если вы хотите, чтобы последнее слово карту в пустой массив:

for (int i = 0; i < split.length; i++) { 
    int remainderLength = split.length - 1 - i; 
    String[] remainders = new String[remainderLength]; 
    if (remainderLength > 0) { 
     System.arraycopy(split, i + 1, remainders, 0, remainderLength); 
    } 
    map.put(split[i], remainders); 
} 
+0

Исходя из вопроса, последним словом также должен быть ключ, предположительно отображающий пустой массив. – shmosel

+0

Для меньшего объема памяти, когда текстовый файл является большим, измените 'String [] split = ...' на 'Список split = Arrays.asList (...)' и используйте 'subList()'. Это не будет копировать массив. – Andreas

+0

В этом ответе не рассматриваются проблемы, вызванные одним и тем же словом, появляющиеся более одного раза (карта будет содержать только последний экземпляр). –

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