У меня есть программа, которая читает слово за словом текстовый файл. Каждое слово проверяется на наличие метки в форме "", "" или чего-то подобного. Если метка найдена, она заменяет эту метку случайным словом из ArrayList, соответствующим его метке, используя следующий метод:
private String getSubstitute(String label) {
if (listMap.get(label) != null){
String substitute = randomFrom(listMap.get(label));
listMap.get(label).remove(substitute);
return randomFrom(listMap.get(label));
}
if (label.equals("number")){
return " " + myRandom.nextInt(50) + 5;
}
return "**UNKNOWN**";
}
Это работает довольно хорошо, за исключением того, что при каждом использовании слов он должен быть удаленным из соответствующего списка, чтобы его нельзя было использовать повторно. Я пытаюсь сделать это в 4-й строке кода выше. HashMap listMap<String, ArrayList>
является переменной экземпляра, поэтому у меня сложилось впечатление, что когда я вызываю listMap.get(label).remove(substitute)
, я получаю прямой доступ к ArrayList, содержащемуся в listMap, и удаляю его. Однако, когда я запускаю код, иногда я вижу повторения слов, которые были ранее использованы. Что мне здесь не хватает?
Для забавного примера вот что было напечатано в одном случае:
Это скользкая история о том, как синий тигр стал синим тигром , Однажды, около 295 десятилетий, по земле бродили разгневанные, злые ящеры. Один из них был назван Джермейн. Этот панголин был один в мире. Затем он стал оранжевым ящером, живущим в Эквадоре. Это животное любило думать и сдаваться. Утром он съел бы зеленый инжир, а потом съел злого человека go на перекус.
и это текстовый файл, из которого была сгенерирована эта история:
Это история о том, как стал . Когда-то около 1010 a go, , s бродили по земле. Один из них был назван . Этот был один в мире. Затем он стал , живущим в . Это животное любило и . Утром он съел бы , а позже съел бы на закуску.