2016-11-28 6 views
-2

У меня есть функция, которая возьмет string и удалит его первое слово и всегда держит последнее слово.Удалить первое слово в строке непрерывно и сохранить последнее слово [Xamarin Forms] C#

Строка возвращается из моей функции SFSpeechRecognitionResult result.

С моим текущим кодом он работает, когда код запускается один раз, первое слово удаляется из строки и остается только последнее слово. Но когда функция запускается снова, новые слова просто сохраняются в result.BestTranscription.FormattedStringstring, и первое слово не удаляется.

Это моя функция:

RecognitionTask = SpeechRecognizer.GetRecognitionTask 
(
    LiveSpeechRequest, 
    (SFSpeechRecognitionResult result, NSError err) => 
    { 
     if (result.BestTranscription.FormattedString.Contains(" ")) 
     { 
      //and this is where I try to remove the first word and keep the last 
      string[] values = result.BestTranscription.FormattedString.Split(' '); 
      var words = values.Skip(1).ToList(); 
      StringBuilder sb = new StringBuilder(); 
      foreach (var word in words) 
      { 
       sb.Append(word + " "); 
      } 

      string newresult = sb.ToString(); 
      System.Diagnostics.Debug.WriteLine(newresult); 
     } 
     else 
     { 
      //if the string only has one word then I will run this normally 
      thetextresult = result.BestTranscription.FormattedString.ToLower(); 
      System.Diagnostics.Debug.WriteLine(thetextresult); 
     } 
    } 
); 
+1

Это может быть потому, что вы всегда добавить пробел в конце строки, поэтому '.Constains (" ")' всегда верно? Вместо этого попробуйте 'String.Join (" ", words)'. –

+1

Зачем хранить это как строку, а не 'List ' для отдельных слов? Или, может быть, даже 'Queue ', как это работает? – DavidG

+0

Еще более быстрый способ будет 'строка newresult = previousresult.Substring (previousresult.IndexOf (» «));' –

ответ

1

Я хотел бы предложить, чтобы просто взять последний элемент после расщепления:

string last_word = result.BestTranscription.FormattedString.Split(' ').Last(); 

Это даст вам всегда последнее слово

убедитесь, что result.BestTranscription.FormattedString != null перед расщеплением, иначе вы получите исключение.

Может быть, есть возможность очистить строку слов после обработки первого, чтобы вы всегда получали только слово, которое записано последним. Вы можете попытаться восстановить его в конце, как это:

result.BestTranscription.FormattedString = ""; 

В основном ваш код будет выглядеть примерно так:

if (result.BestTranscription.FormattedString != null && 
    result.BestTranscription.FormattedString.Contains(" ")) 
{ 
    //and this is where I try to remove the first word and keep the last 
    string lastWord = result.BestTranscription.FormattedString.Split(' ')Last(); 

    string newresult = lastWord; 
    System.Diagnostics.Debug.WriteLine(newresult); 
} 
+0

Спасибо большое! :) Очень хорошо работает с этим решением. –

+0

@ CarlosRodrigez рад, что я мог бы помочь. –

 Смежные вопросы

  • Нет связанных вопросов^_^