如何检查字符串是否包含与Java中给定范围不同的字母

时间:2015-10-07 01:13:26

标签: java

我正在学习Java,我需要编写一个转换罗马数字和传统整数的程序。

代码只接受字母MDCLXVI作为罗马数字。它不接受任何数字。

这是我的代码:

System.out.print("Enter a roman numeral");
            Scanner keyb = new Scanner(System.in);
            String roman = keyb.next();

            if(roman.matches(".*[0-9].*") || **something different then M, D, C, L, X, V or I**)
        {
            System.out.println("Wrong! Re-type.");
        } 

我想解决的问题是如何编写If的第二个条件。

3 个答案:

答案 0 :(得分:0)

首先,我使用toLowerCase()来小写用户输入,然后使用matches()检查用户输入是否等于M D C L X V I的字符。

String user_input = "M";

if (user_input.toLowerCase().matches("m|d|c|l|x|v|i")){
    System.out.println("Matches");  
}

答案 1 :(得分:0)

你可以用这个:

    if(roman.matches(".*[0-9].*") || 
            !roman.matches("[MDCLXVI]"))

这不区分大小写:

    if(roman.matches(".*[0-9].*") ||
            !roman.matches("(?i)[MDCLXVI]"))

答案 2 :(得分:0)

首先,您必须检查给定的罗马数字是否有效。所以该方法可能如下所示:

public static boolean isValid(String romanNumber) {
    String pattern = "[m|d|c|l|x|v|i]*";
    Pattern p = Pattern.compile(pattern);
    Matcher m = p.matcher(romanNumber);

    return m.matches();
}

然后你可以在转换器方法中使用这个。完成此操作后,必须转换罗马字符串中的每个字符。因此,您可以通过创建一个开关函数来继续,该函数可以在for循环中使用。

public static int convertCharacter(String romanNumber, int position) {
    char c = romanNumber.charAt(position);
    switch (c) {
        case 'm':
            return 1000;
        case 'd':
            return 500;
        case 'c':
            return 100;
        case 'l':
            return 50;
        case 'x':
            return 10;
        case 'v':
            return 5;
        case 'i':
            return 1;
        default:
            return 0;
    }
}

由于您不熟悉Java,我将向您展示如何编写转换器方法。这个不是最好的解决方案,但它对我有用。使用这个,也可以转换像“MCMXCIX”这样的数字。

我删除了评论。因此,请尝试了解代码的作用。否则你就不会从中吸取教训。

public static int convertRomanNumber(String romanNumber) {
    romanNumber = romanNumber.toLowerCase();

    if (!isValid(romanNumber)) {
        System.out.println("Invalid character detected");
        System.exit(0);
    }

    int result = 0;
    int currentNumber;
    int nextNumber;

    for (int i = 0; i < romanNumber.length(); i++) {
        currentNumber = convertCharacter(romanNumber, i);
        if (i < romanNumber.length() - 1) {
            nextNumber = convertCharacter(romanNumber, i + 1);
            if (nextNumber > currentNumber) {
                result += currentNumber * -1;
            } else {
                result += currentNumber;
            }
        } else {
            result += currentNumber;
        }
    }

    System.out.println("Your input: " + romanNumber.toUpperCase());

    return result;
}

我希望它对未来有所帮助。

一切顺利。