Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 屏蔽字符串而不留下两个连续的未发现字母(如果可能)_Java - Fatal编程技术网

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表掩蔽奇数字母?
******* *******