如果检查用户输入的字符串的语句是否包含用户输入的字母,不包括任何额外的字母

时间:2015-05-11 00:39:23

标签: java string if-statement java.util.scanner

我需要创建一个程序,其中用户输入一个字符串和5个字母,程序检查是否可以从这5个字母再次创建字符串,但忽略不能创建字符串的任何字母。< / p>

例如,如果我输入单词“hello”然后我输入5个字母“h”,“e”,“l”,“o”和“p”,我希望程序确保这些字母组成单词“hello”,但忽略任何多余的字母,在这种情况下是“p”。另一个例子,如果我输入单词“apple”然后我输入5个字母“a”,“p”,“l”,“o”和“f”,我希望程序能够识别那些字母不创建单词apple并忽略字母“o”和“f”。

如果程序确实可以验证字符串是否可以从这5个字母创建,而忽略任何额外的字符,那么它将输出“You win!”,但如果没有,它将输出“You lose!”。这是我到目前为止的代码:

public static void main(String[] args) {

    Scanner keyboard = new Scanner (System.in);
    System.out.print("Please enter a word: ");
    String in = keyboard.nextLine();
    System.out.print("Please enter the first letter: ");
    String letter1 = keyboard.next();
    System.out.print("Please enter the second letter: ");
    String letter2 = keyboard.next();
    System.out.print("Please enter the third letter: ");
    String letter3 = keyboard.next();
    System.out.print("Please enter the fourth letter: ");
    String letter4 = keyboard.next();
    System.out.print("Please enter the fifth letter: ");
    String letter5 = keyboard.next();

    if (in.contains(letter1 + letter2 + letter3 + letter4 + letter5)) {
        System.out.println("You win!");
    } else {
        System.out.println("You lose!");
    }

}

这是我运行时得到的输出:

sample output

我是Java的新手,所以我不知道是否有某种代码可以用来做这件事。如果有人知道,请引导我朝正确的方向前进。

2 个答案:

答案 0 :(得分:3)

我能想到的最简单的算法是:对于输入的每个字符,从字符串中删除所有出现的字符。最后,检查字符串是否为空。或者在代码中:

char[] cs = new char[] {'h', 'e', 'l', 'o', 'p'};
String s = "hello";
for (char c : cs) s = s.replace(c+"", "");
if (s.isEmpty()) System.out.println("You win!");

请注意,此方法效果不佳。对于给定数量的字符n和字符串长度m,其执行为O(n*m)。它还会进行大量昂贵的String重新分配。

答案 1 :(得分:0)

语句letter1 + letter2 + letter3 + letter4 + letter5连接字符串。如果将结果存储在变量中,则该变量将等于字符串helop

我会在某种Collection中存储1-5个字母,然后使用charAt检查每个字符是否在该集合中。还有其他更有效的方法来解决你的问题,但我认为这是最清楚的。