2016-10-25 5 views
1

私はコスモスを使って簡単なOSを作って、それについて少し分かります。 echoと呼ばれるコマンドラインをユーザの入力をエコーするようにしたい場合は、まずその入力がその前に "echo"を持っているかどうかを確認する必要があります。 たとえば、 "echo hello world"と入力すると、echoが新しいコマンドラインであるため、VMwareに "hello world"をエコーし​​ます。私が試した何c#文字列に特定の単語があるかどうかをチェック

は、それは効率的ではありません

String input = Console.ReadLine(); 
if (input.Contains("echo")) { 
    Console.WriteLine(input} 
} 

です。まず、VMwareは

IndexOf(..., StringComparison) not fully supported yet! 

を言うと、ユーザーは自分の文字列の途中ではなく、コマンドとして「エコー」と入力します。

これを解決する効率的な方法はありますか?

+1

あなたはSTARTSWITHを使用することはできますか? –

+2

'IndexOf'を使うことができないのなら、実際の文字' if(input [0] == 'e' && input [1] == 'c' ..)をチェックしない限り、 ..) ' – juharr

答えて

1
if(!string.IsNullOrEmpty(input) && input.StartsWith("echo")) 
     { 
      Console.WriteLine(input); 
     } 

Containsの代わりにStartWithを使用してください。最初に文字列がヌルか空であるかどうかを確認してください。

+0

このコードは私の保護されたオーバーライドvoid Run()で、私はループなしで何かを入力するとすぐにVMwareが自動的に終了します。なぜなのかご存知ですか? –

0

スペースで分割してスイッチで確認できます。

String input = Console.ReadLine(); 
String[] input_splited = input.split(' '); 
switch(input_splited[0]){ 
    case 'echo': 
     String value = input_splited[1]; 
     Console.WriteLine(value); 
     break; 
    case 'other_cmd': 
     String other_value = input_splited[1]; 
     break; 
} 

私はそれがうまくいくと思います。私はあなたがそのような何かが必要であることを把握

0

:):

 const string command = "echo"; 
     var input = Console.ReadLine(); 

     if (input.IndexOf(command) != -1) 
     {     
      var index = input.IndexOf("echo");    
      var newInputInit = input.Substring(0, index); 
      var newInputEnd = input.Substring(index + command.Length); 
      var newInput = newInputInit + newInputEnd; 
      Console.WriteLine(newInput); 
     } 

     Console.ReadKey(); 
関連する問題