java—如何检查字符串是否包含数组中的值

djmepvbi  于 2021-06-29  发布在  Java
关注(0)|答案(5)|浏览(407)

我对java还比较陌生,我正在尝试检查用户名是否有亵渎的行为。我制作了一个包含4个亵渎词的数组,现在我想检查用户的输入中是否有不好的词,但是,我不知道如何形成if语句来检查数组中的所有项。

public static void main(String[] args) {

    Scanner character = new Scanner(System.in);

    String[] profanities = {"asshole", "ass", "idiot", "stupid"};

    System.out.println("What is your name");
    String userName = character.next();
    if (userName.contains(profanities[])) { //This Part is what i dont understand
        System.out.println("Invalid name");
    }
    else {
        System.out.println("Valid Name!");
    }
}
vvppvyoh

vvppvyoh1#

使用集合而不是数组列表,然后 profanities.contains(userName) . 请注意,为了使if语句的计算结果为true,用户应该已经输入了与亵渎集相同的亵渎内容。如果用户输入类似“userjackass”的内容,就不会被归类为亵渎。

zc0qhyus

zc0qhyus2#

我会这样做。。

import java.util.Scanner;

public class Profanities {

    public static void main(String[] args) {

        boolean allow = false;
        Scanner scan = new Scanner(System.in);
        String[] profanity_list = {"asshole", "ass", "idiot", "stupid"};
        String test_input = "";

        // do while until allow equals true..
        while (!allow) { 

            System.out.println("What is your name?");
            test_input = scan.nextLine();
            byte memory = 0;

            // compare the input with the elements of the array..
            for (int pos = 0; pos < profanity_list.length; pos++) {

                if (test_input.contains(profanity_list[pos]) == true) {
                    System.out.println("Invalid name. Let's start again..");
                    memory = 1;
                    break;
                }
            }
            // if memory equals 1, it means that a profanity was found..
            if(memory == 0){allow = true;}
        }
        String name = test_input;
        System.out.println("That is a valid name. Thanks.");
    }
}
kcwpcxri

kcwpcxri3#

无需进一步创造 Collections ,只是你原来的数组。由于先前将设置/已知无效名称集 sort 程序启动时,操作只能执行一次。
一经整理,就打电话 binarySearch 每输入一次:

Arrays.sort(profanities); //--> if profanities is a static set, call this just once.

if (Arrays.binarySearch(profanities,username)>=0)  
    System.out.println("Invalid name");
else 
    System.out.println("Valid Name!");

//binarySearch will return >=0 if the value is found

这样可以避免创建集合、列表或实现循环。
如果无效名称集可能发生更改(例如,添加新名称),则需要第二次更改 sort 操作。在这种情况下,提供的其他答案将是更好的方法。如果无效名称集是已知的,并且在程序执行期间不会更改,请使用此方法。

xdnvmnnf

xdnvmnnf4#

尝试:

for(String string : profanities)
  if(userName.contains(string))System.out.println("invalid name"); 
  else System.out.println("valid name");

注:以下为 for 循环遍历数组中的每个条目,并检查该条目是否包含在username中

ddhy6vgd

ddhy6vgd5#

不要使用字符串数组,而是使用字符串列表,从中可以轻松使用contains方法。我用列表修改了你的代码,请参阅下面

public static void main(String[] args) {

    Scanner character = new Scanner(System.in);

    //String[] profanities = {"asshole", "ass", "idiot", "stupid"};

    ArrayList<String> profanities = new ArrayList<String>();
    profanities.add("asshole");
    profanities.add("ass");

    System.out.println("What is your name");
    String userName = character.next();
    if (profanities.contains(userName)) { //This Part is what i dont understand
        System.out.println("Invalid name");
    }
    else {
        System.out.println("Valid Name!");
    }
}

使用list的另一个优点是,它是动态的,您可以在将来向它添加元素而不会出现任何问题

相关问题