Java 屏蔽字符串而不留下两个连续的未发现字母(如果可能)
我正在建立一个面具类的琐事游戏的目的。我的问题是,我如何优雅地改变我的屏蔽方法(见下文),使其屏蔽我的字符串,使其永远不会留下两个被发现的字母,一个接一个 例如,我的面具可能会将Java 屏蔽字符串而不留下两个连续的未发现字母(如果可能),java,Java,我正在建立一个面具类的琐事游戏的目的。我的问题是,我如何优雅地改变我的屏蔽方法(见下文),使其屏蔽我的字符串,使其永远不会留下两个被发现的字母,一个接一个 例如,我的面具可能会将迈克尔·杰克逊变成**ch***********。我想消除这种情况 我的代码: import java.util.Random; /** * This class represents a string masker class. */ public class Masker{ public stati
迈克尔·杰克逊
变成**ch***********
。我想消除这种情况
我的代码:
import java.util.Random;
/**
* This class represents a string masker class.
*/
public class Masker{
public static String mask(String string, int maskingRatio, String maskingChar){
int spaceCount = 0;
for (char c : string.toCharArray()) {
if (c == ' ') {
spaceCount++;
}
}
StringBuilder builder = new StringBuilder(string);
Random random = new Random();
int length = string.length();
int i = length - (length / maskingRatio) - spaceCount;
while (i > 0){
int stringIndex = random.nextInt(length);
System.out.println(stringIndex);
if ((builder.charAt(stringIndex) != ' ') && (builder.charAt(stringIndex) != maskingChar.charAt(0))){
builder.replace(stringIndex, stringIndex + 1, maskingChar);
i--;
}
}
return builder.toString();
}
}
如果掩蔽率小于50%,则无论如何都将面临两个连续字符的问题。如果你能保证掩蔽率可以超过50%,那么你可以无条件地掩蔽奇数,然后随机化其余部分,直到达到你想要的掩蔽率 我假定您只希望删除奇数个字母,而不希望删除偶数个字母。根据ASCII表。这就是我对它的解释。所以我排除了掩蔽率,因为这个问题很模糊 我就是这样做的 守则:
public static String mask(String text, char maskingChar) {
char ch = ' ';
String newText = "";
for (int i = 0; i < text.length(); i++) {
ch = text.charAt(i);
if (ch != ' ') {
newText += maskingChar;
} else {
newText += " ";
}
}
return newText;
}
7个字母,加上1个空格和7个字母=15个字符,原始输入。一个简单的方法是只发现奇数字母。但我的掩蔽比可以是1:5,如果我只发现奇数字母,它将是1:2。我没有说全部发现奇数,只是发现奇数问:出于好奇,“掩蔽比”会是多少是为迈克尔·杰克逊而写的吗?*i*h***********?还有-如果你在做除法,为什么你的算术都在整数空间?掩蔽比是5我不知道这是如何回答这个问题的,或者偶数地址只删除奇数字母。那么他是不是打算留下偶数字母并根据ASCII表掩蔽奇数字母?
******* *******