Подстановка процента слов в случайных индексах в массиве 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.

Другие вопросы по тегам