簡體   English   中英

在Java中,如何確定輸入字符串中的單詞是否以隨機分配的字母開頭?

[英]How to determine if words in an input string start with random assigned letters in Java?

我向用戶提供了三個隨機字母,讓我們說' JUD ' ,我的用戶必須為每個字母指定一個單詞,從分配的隨機字母開始,例如:

“僅使用數據”。

我一直沒有成功搜索如何驗證用戶輸入是否以分配的隨機字母開頭。

我的密碼

public static void generateLetters(){
    Random randomLetter = new Random();
    int i;
    char[] letter = {'A', 'B', 'C', 'D', 'E', 'F'};
        // It's A-Z, but for typing sake... you get the point
    char[] letters = new char[26];
        for(i = 0; i <= 3; i++){
            letters[i] = letter[randomLetter.nextInt(26)];
            System.out.printf(letters[i] + "   ");
        }
}

上面的代碼塊將隨機生成字母,並且可以正常工作。 在下面,我將基本上輸入用戶輸入的內容。

public static String[] getWord(String[] word){
    System.out.println("Enter a word for your letters: ");
    Scanner wordInput = new Scanner(System.in);
    String inputWord = wordInput.nextLine().toUpperCase();
    return word;
}

到目前為止,這很簡單,這是我的main功能:

public statc void main(String[] args){
    generateLetters();
    getWord();
}

我需要獲取從getWord()返回的字符串,並驗證每個單詞輸入的確以隨機分配的字母開頭。 我一直做不到這一點。 我在網上研究期間發現的所有語法都讓我感到困惑。

generateLetters()應該返回生成的字母。

getWord()實際上對用戶輸入沒有任何作用。 使它返回一個包含用戶輸入的字符串。

您可以使用單獨的方法來驗證輸入。

這是您代碼的固定版本。

public static void main(String[] args) {
    char[] letters = generateLetters();
    System.out.println(letters);
    String input = getWord();
    System.out.println("Input is " + (isValid(letters, input) ? "valid" : "invalid"));
}


public static boolean isValid(char[] letters, String input) {
    String[] words = input.split(" ");
    for (int n = 0; n < words.length; n++)
        if (!words[n].startsWith("" + letters[n]))
            return false;
    return true;
}

// Here're the fixed versions of your other two methods:

public static String getWord(){
    System.out.println("Enter a word for your letters: ");
    Scanner wordInput = new Scanner(System.in);
    String inputWord = wordInput.nextLine().toUpperCase();
    wordInput.close();
    return inputWord;
}

public static char[] generateLetters(){
    Random randomLetter = new Random();
    char[] letter = new char[26];
    char c = 'A';
    for (int i = 0; i < 26; i++)
        letter[i] = c++;
    char[] letters = new char[26];
    for(int i = 0; i < 3; i++)
        letters[i] = letter[randomLetter.nextInt(26)];
    return letters;
}
import java.util.Random;
import java.util.Scanner;


public class NewClass {

public static void main(String[] args) {
    char[] letters = generateLetters();
    String input = getWord();
    String[] words = input.split(" ");
    if (words.length == letters.length) {
        if (check(letters, words)) {
            System.out.println("Yeah");
        } else {
            System.out.println("Oops");
        }
    } else {
        System.out.println("INVALID");
    }

}

public static Boolean check(char[] letters, String[] words) {
    for (int i = 0; i < letters.length; i++) {
        if (words[i].charAt(0) != letters[i]) {
            return false;
        }
    }
    return true;
}

public static String getWord() {
    System.out.println("Enter a word for your letters: ");
    Scanner wordInput = new Scanner(System.in);
    String inputWord = wordInput.nextLine().toUpperCase();
    return inputWord;
}

public static char[] generateLetters() {
    Random randomLetter = new Random();
    char[] letters = new char[3];//Make it varaible length
    for (int i = 0; i < letters.length; i++) {
        letters[i] = (char) ((int) randomLetter.nextInt(26) + 'A');
        System.out.printf(letters[i] + "   ");
    }
    return letters;
}
}

方法2:正則表達式

public static Boolean check(char[] letters, String word) {

    return word.matches(letters[0]+"(\\S)*( )"+letters[1]+"(\\S)*( )"+letters[2]+"(\\S)*");

}

你可以試試這個。

public static String getWord() {
        System.out.println("Enter a word for your letters: ");
        Scanner wordInput = new Scanner(System.in);
        String inputWord = wordInput.nextLine().toUpperCase();
        wordInput.close();
        return inputWord;
    }

    public static void main(String[] args) {
        char[] letters = generateLetters();
        String input = getWord();
        StringTokenizer st = new StringTokenizer(input, " ");
        int counter = 0;
        boolean isValid = true;
        while (st.hasMoreTokens()) {
            String word = st.nextToken();
            if (!word.startsWith(String.valueOf(letters[counter]))) {
                isValid = false;
                break;
            }
            counter++;
        }
        if (isValid) {
            System.out.println("valid");

        } else {
            System.out.println("Invalid");

        }

    }

該代碼僅適用於您提供的輸入,我假設這就是您所需要的,即,如果隨機字母為' JUD '僅輸入"Just Use Data". 將被視為正確輸入,而不是Use Just Data. 我也沒有檢查輸入的邊界。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM