我正在编写一个Java程序,可以将输入的罗马数字转换为Short,我希望它能够识别并在输入除罗马数字(I,V,X)之外的任何字母时再次输入输入,L,C,D和M)。
是否有类似.contains()的方法,但功能相反?
或者我是否必须通过某种循环检查每个字母?
答案 0 :(得分:1)
我建议你使用正则表达式来检查输入是否是罗马数字。您可以找到此问题的正则表达式here。使用String#matches()
确定您的输入是否与正则表达式匹配。
if(!input.matches("^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$")) { // input is the String the user entered
// handle invalid input here
}
答案 1 :(得分:1)
当然,你需要某种类型的过滤器来测试输入。
一种解决方案可能是使用包含输入中所有可能有效字符的字符串,如果在过滤器中找不到字符则返回false。
public class HelloWorld
{
public static boolean filter(String test, String filter) {
for(int i = 0; i < test.length(); i++) {
if (filter.indexOf(test.charAt(i)) == -1) {
return false;
}
}
return true;
}
// arguments are passed using the text field below this editor
public static void main(String[] args)
{
System.out.println(filter("XDQX", "XDQ"));
}
}
答案 2 :(得分:0)
只需测试有效字符,而不是有效序列,可以使用contains:
进行测试boolean roman (String s)
{
for (char c: s.toCharArray())
if (! "IVXCLDM".contains(""+c))
return false;
return true;
}
但是,我更喜欢正则表达式
boolean roman (String s)
{
return s.matches ("[IVXCLDM]+");
}
表示该Set中任意数量(+)的字符,至少一个。