Подстановка процента слов в случайных индексах в массиве String
У меня есть строка как
Это очень хорошее предложение
Я разбиваю его на отдельные слова и храню в String[]
с:
String[] words = s.split(" ");
Как я могу взять определенный процент от общего количества слов (скажем, 2 из 6 слов) и заменить эти 2 слова чем-то другим. Мой код до сих пор:
//Indexes in total
int maxIndex = words.length;
//Percentage of total indexes
double percentageOfIndexes = 0.20;
//Round the number of indexes
int NumOfIndexes = (int) Math.ceil( maxIndex * (percentageOfIndexes / 100.0));
//Get a random number from rounded indexes
int generatedIndex = random.nextInt(NumOfIndexes);`
1 ответ
Решение
Сначала подсчитайте, сколько слов вы хотите заменить:
int totalWordsCount = words.length;
double percentageOfWords = 0.20;
int wordsToReplaceCount = (int) Math.ceil( totalWordsCount * percentageOfWords );
Затем, зная, сколько слов вы хотите заменить, получите столько случайных индексов и просто поменяйте местами слова по этим индексам:
for (int i=0; i<wordsToReplaceCount; i++) {
int index = random.nextInt(totalWordsCount);
//and replace
words[index] = "Other"; // <--- insert new words
}
ПРИМЕЧАНИЕ. Просто помните, что чем меньше количество слов, тем больше расхождение между вашим процентом и фактическим количеством заменяемых слов, например. 20% из 6 слов - это 1,2 слова, которое становится 2 после Math.ceil(), а 2 - 33,33% из 6.