我想检查用户的输入,以确保它们只输入点和破折号,任何其他字母或数字都会返回并显示错误消息。此外,我想让用户进入空间,但当我转换时,我如何删除或忽略空格?
string permutations;
string entered = "";
do
{
Console.WriteLine("Enter Morse Code: \n");
permutations = Console.ReadLine();
.
.
} while(entered.Length != 0);
谢谢!
答案 0 :(得分:3)
string permutations = string.Empty;
Console.WriteLine("Enter Morse Code: \n");
permutations = Console.ReadLine(); // read the console
bool isValid = Regex.IsMatch(permutations, @"^[-. ]+$"); // true if it only contains whitespaces, dots or dashes
if (isValid) //if input is proper
{
permutations = permutations.Replace(" ",""); //remove whitespace from string
}
else //input is not proper
{
Console.WriteLine("Error: Only dot, dashes and spaces are allowed. \n"); //display error
}
答案 1 :(得分:2)
假设您将字母分隔为单个空格,将单词分隔两个空格。然后,您可以使用像这样的正则表达式测试您的字符串是否格式良好
bool ok = Regex.IsMatch(entered, @"^(\.|-)+(\ {1,2}(\.|-)+)*$");
正则表达式解释:
^
是字符串的开头。
\.|-
是一个点(使用\
进行转义,因为点在正则表达式中具有特殊含义)或(|
)减号。
+
表示一个或多个重复剩下的内容(点或负)
\ {1,2}
一个或两个空格(后面再加上点或误点(\.|-)+
)
*
重复空格,然后是零点或小数点零次或多次
$
是该行的结尾。
您可以使用
拆分空格处的字符串string[] parts = input.Split();
两个空格将创建一个空条目。这允许您检测字边界。 E.g。
"–– ––– .–. ... . –.–. ––– –.. .".Split();
生成以下字符串数组
{string[10]} [0]: "––" [1]: "–––" [2]: ".–." [3]: "..." [4]: "." [5]: "" [6]: "–.–." [7]: "–––" [8]: "–.." [9]: "."