我的代码中有一个字符串。我想删除80%的字符串字母,并将其替换为“ _”(下划线)。
我设法用“ _”替换所有字符串char,但是我不能使其仅替换字符串的80%。
var a = "mystring";
var splitted = a.split('');
var count = 0;
while(count < a.length) {
if(splitted[count] !== '_' && splitted[count] !== ' ') {
splitted[count] = '_ ';
count++;
}
}
console.log(splitted);
代码输出:_ _ _ _ _ _ _ _
所需的输出:_ y _ _ _ _ _ _
或:_ _ s _ _ _ _ _
或:_ _ _ _ _ _ i _
答案 0 :(得分:2)
如果要替换字符串的80%,则需要搜索整个单词的长度,然后乘以0.8,然后再替换随机字母。
var string = 'mystring';
var splitted = string.split('');
var percent = Math.round(splitted.length * 0.8);
var changues =0;
while (changues<percent){
var random = Math.floor((Math.random() * splitted.length ) + 0);
if(splitted[random]!='_'){
splitted[random]='_';
changues++;
}
}
string=splitted.join('');
console.log(string);
答案 1 :(得分:1)
这是我能想到的最接近的简单解决方案。它将以一定的概率隐藏字母。假设您要以“ 80%的概率”隐藏字母,然后就这样完成了。当然,它不会每次都隐藏80%的字母:
/*func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableView.automaticDimension
}*/
答案 2 :(得分:1)
您可以通过检查随机值来替换单个字符。
var string = "mystring",
replaced = string.replace(/./g, c => Math.random() < 0.8 ? '_' : c);
console.log(replaced);
答案 3 :(得分:0)
您可以先替换所有字母,然后计算字母数以返回到原始字母。
function replace(string, percent) {
let re = string.replace(/\S/g, '_').split('')
let len = string.replace(/ /g, '').length
let count = len - Math.ceil(len * percent)
while (count) {
let int = Math.floor(Math.random() * string.length)
if (re[int] != ' ' && re[int] == '_') {
re[int] = string[int]
count--
}
}
return re.join('')
}
console.log(replace("mystring lorem", 0.8))
console.log(replace("mystring", 0.8))
console.log(replace("Lorem ipsum dolor sit amet.", 0.2))
答案 4 :(得分:0)
String.prototype.replaceAt = function(index, replacement) {
return this.substr(0, index) + replacement + this.substr(index + replacement.length);
}
var a = "mystring";
var len = a.length;
var x = len * 0.8;
var ceil= Math.ceil(x);
var i;
var used = [];
for (i = 0; i < ceil; i++) {
var exist = true;
while (exist) {
var index = Math.floor(Math.random() * len);
exist = used.includes(index);
}
a = a.replaceAt(index, '_');
used.push(index);
}
console.log(a);
答案 5 :(得分:0)
我已经创建了一种通用方法来满足您的需求。它基于Set的生成
将保存N%
个索引(具有随机生成),这些索引将被替换。然后,我们使用replace()的replacement
函数检查每次迭代是否需要完成对token
的替换,基本上检查是否要替换的字符的当前索引为在前面提到的Set
上。
const replace = (str, token, percentage) =>
{
// Get the quantity of characters to be replaced.
var numToReplace = Math.floor(str.length * percentage);
// Generate a set of random indexes to be replaced.
var idxsToReplace = new Set();
while (idxsToReplace.size < numToReplace)
{
idxsToReplace.add(Math.floor(Math.random() * str.length));
}
// Do the replacement of characters:
return str.replace(/./g, (x, offset) => idxsToReplace.has(offset) ? token : x);
}
console.log(replace("mystring", "_", 0.8));
console.log(replace("mystring", "+", 0.5));
console.log(replace("Hello World", "#", 0.7));