Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.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 从for循环中的字符串中删除字母_Java - Fatal编程技术网

Java 从for循环中的字符串中删除字母

Java 从for循环中的字符串中删除字母,java,Java,我怎样才能从字母表中猜出字母?因此,如果第一个猜测是AABB,我需要从字符串字母表中得到A和B,从而在没有字母A和B的情况下进行新的随机猜测 randomCode.clear();//Clears the random code ArrayList to put a new one in it Random r = new Random(); String alphabet = "ABCDEF"; StringBuilder result = new String

我怎样才能从字母表中猜出字母?因此,如果第一个猜测是AABB,我需要从字符串字母表中得到A和B,从而在没有字母A和B的情况下进行新的随机猜测

    randomCode.clear();//Clears the random code ArrayList to put a new one in it
    Random r = new Random();
    String alphabet = "ABCDEF";
    StringBuilder result = new StringBuilder(randomCode.size());

    if(turn == 0){
        guess = "AABB";

    }else{
        if(blackPin == 0 && whitePin ==0){
            for (int c = 0; c < 4; c++) {
                if(alphabet.charAt(c) == guess.charAt(c)){

                }
                randomCode.add(alphabet.charAt(r.nextInt(alphabet.length())));//generate 4 random letters with the letters ABCDEF and put in arrayList
            }
            for (Character c : randomCode){//Converts Char[] randomCode to a String
                result.append(c);
                }
            guess = result.toString();//Gives the String guess 4 random letters.
randomCode.clear()//清除随机码数组列表以在其中放置新的随机码数组
随机r=新随机();
字符串字母表=“ABCDEF”;
StringBuilder结果=新的StringBuilder(randomCode.size());
如果(转动==0){
guess=“AABB”;
}否则{
如果(黑钉==0&&whitePin==0){
对于(int c=0;c<4;c++){
if(字母表字符(c)=猜测字符(c)){
}
randomCode.add(alphabet.charAt(r.nextInt(alphabet.length());//生成4个带有字母ABCDEF的随机字母并放入arrayList
}
对于(字符c:randomCode){//将字符[]随机码转换为字符串
结果:追加(c);
}
guess=result.toString();//给出字符串guess 4个随机字母。

如果可以避免,为什么要循环:

String abd = "ABCDEF";
String guess = "AABB";
System.out.println(abd.replaceAll(String.join("|", guess.split("")), ""));
这张照片是:


CDEF

如果您有一个
数组列表,例如:

ArrayList<Character> alphabet = new ArrayList<>(Arrays.asList('A', 'B', 'C', 'D'));
您可以从字母表中删除猜测中出现的每个字母,如图所示:

for (int i = 0; i < guess.length(); i++)
    alphabet.remove(new Character(guess.charAt(i)));

最有效的方法是利用这样一个事实,即字母的ASCII码是26个连续整数,并从char转换为int。代码65-68是ABCD


迭代字符并逐个比较。如果使用contains,它只会告诉您它在那里,而不是多少次。java中的字符串是不可变的,因此不能在字符串中删除字符。要删除字符,请使用StringBuilder!!!不管有多少次。如果它在那里,则应从视图中删除它就复杂性而言,这个解决方案是O(n),就像扫描输入的每个字母的
循环一样(总是O(n))。
for (int i = 0; i < guess.length(); i++)
    alphabet.remove(new Character(guess.charAt(i)));
for (int i = 0; i < alphabet.size(); i++)
    System.out.print(alphabet.get(i));
ArrayList<Character> alphabet = new ArrayList<>(Arrays.asList('A', 'B', 'C', 'D'));
Random random = new Random();
String guess = "";

while (true) {
    /* init a guess */
    guess = "";
    for (int j = 0; j < 4; j++)
        guess += alphabet.get(random.nextInt(alphabet.size()));
    System.out.println("The guess is: " + guess);

    /* remove letters */
    for (int j = 0; j < guess.length(); j++)
        alphabet.remove(new Character(guess.charAt(j)));

    /* the alphabet is empty */
    if (alphabet.isEmpty()) {
        System.out.println("The alphabet is empty");
        break;
    }
}