连续删除字符串中的第一个单词并保留最后一个单词[Xamarin Forms] C#

时间:2016-11-28 11:55:51

标签: c# string xamarin xamarin.forms speech-recognition

我有一个功能,需要string并删除它的第一个单词,并始终保留最后一个单词。

字符串从我的函数SFSpeechRecognitionResult result返回。

使用我当前的代码,当代码运行一次时,它会起作用,第一个单词从字符串中删除,只剩下最后一个单词。但是当该函数再次运行时,新添加的单词将继续堆叠在result.BestTranscription.FormattedString string中,并且第一个单词不会被删除。

这是我的功能:

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 个答案:

答案 0 :(得分: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);
}