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

时间:2020-12-23 17:42:05

标签: java arrays string

我对 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!");
    }
}

5 个答案:

答案 0 :(得分:0)

使用 Set 而不是 ArrayList,然后使用 profanities.contains(userName)。请注意,用户应该输入与亵渎语言集中相同的亵渎语言,以便 if 语句评估为真。如果用户输入诸如“userjackass”之类的内容,则不会被归类为脏话。

答案 1 :(得分:0)

无需进一步创建 ipconfig -all,只需创建原始数组即可。由于这组无效名称将预先设置/已知,因此 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 操作。在这种情况下,提供的其他答案将是更好的方法。使用此方法如果无效名称集是已知的并且不会在程序执行期间更改

答案 2 :(得分:0)

我会这样做..

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.");
    }
}

答案 3 :(得分:-1)

试试:

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

注意:for 循环遍历数组中的每个条目并检查该条目是否包含在 userName 中

答案 4 :(得分:-1)

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

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 的另一个优点是,它是动态的,您将来可以毫无问题地向其中添加元素

相关问题