Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何删除textbox1中字符串中剩余的最后一个单词_C# - Fatal编程技术网

C# 如何删除textbox1中字符串中剩余的最后一个单词

C# 如何删除textbox1中字符串中剩余的最后一个单词,c#,C#,如何删除像这样的文本框中字符串中的最后一个剩余单词 文本框1中的值:“这是我第一次学习c#” 使用此代码,我可以从左侧删除每个单词,直到最后一个剩余单词“C#” string word = textbox1.Text; if (word.Length > 0) { int k = word.IndexOf(" ") + 1; string ster = word.Substring(k); textbox1.Text = ster; } 重复执

如何删除像这样的文本框中字符串中的最后一个剩余单词

文本框1中的值:“这是我第一次学习c#”

使用此代码,我可以从左侧删除每个单词,直到最后一个剩余单词“C#”

string word = textbox1.Text;
if (word.Length > 0)
{
    int k = word.IndexOf(" ") + 1;
    string ster = word.Substring(k);
    textbox1.Text = ster;
}
重复执行此代码后,下表显示文本框中显示的结果:

迭代 结果 这是我第一次学习c# 1. 这是我第一次学习c# 2. 我第一次学c# 3. 第一次学习c# 4. 学习c的时间# 5. 学习c语言的方法# 6. 学习c# 7. c# 8. c# 9 c#
问题是最后没有空间来构建下一个子串索引,一种方法是注入一个空间,这样
k
的值对于最后一个字仍然是非零的,或者求助于分支逻辑:

string word = textbox1.Text + " "; // Hack: create the final space 
if (word.Length > 1) // adjust for our Hack
{
    int k = word.IndexOf(" ") + 1;
    string ster = word.Substring(k);
    textbox1.Text = ster;
}
分支版本:

string word = textbox1.Text;
if (word.Length > 0)
{
    int k = word.IndexOf(" ") + 1;
    if (k > 0)
    {
        string ster = word.Substring(k);
        textbox1.Text = ster;
    }
    else
        textbox1.Text = String.Empty;
}
这两种解决方案都不比另一种更有效,但是我发现分支逻辑(在本例中)更容易解释思维过程,然而,注入一个空间确实需要一些文档,以便您的同行审查代码或将来回来维护代码,从而理解您的意图和原始思维过程

可以将这两种解决方案进一步串联起来(减少代码行以表达相同的逻辑),但是,如果您刚刚开始,则使用额外的代码行和字符以使代码更具可读性和表达性不会受到惩罚。

替代方法:

var phrase =  "this is my first time of learning c#";
var withoutLastWord = phrase.Remove(phrase.LastIndexOf(' '));
    
Console.WriteLine($"'{withoutLastWord}'");

// Output: 'this is my first time of learning'

假设这是一个在每次执行时删除每个单词的功能

string word = textbox1.Text;
if (String.IsNullOrEmpty(word))
{
    return;
}
    
List<string> wordList = word.Trim().Split(' ').ToList();
wordList.RemoveAt(0);

textbox1.Text = String.Join(" ", wordList);
    
string word=textbox1.Text;
if(String.IsNullOrEmpty(word))
{
返回;
}
List wordList=word.Trim().Split(“”).ToList();
单词表.RemoveAt(0);
textbox1.Text=String.Join(“,单词列表);
为了便于解释,我用空格将
word
变量拆分为
List
,并删除句子中的第一个单词

添加了Trim(),以避免
word
变量开头或结尾包含空格时出现代码中断

验证字符串
IsNullOrEmpty
,如果为true,则不会执行
if
条件后的语句


只需在字符串末尾添加一个“”,您所面临的问题是,(c#)后面没有空格,因此无法对其进行子串

让我们稍微调整一下您的逻辑。而不是:

if (word.Length > 0)
我们可以询问它是否包含空格,然后很容易知道如果不包含空格,我们可以将框设置为空:

string word = textbox1.Text;
if (word.Contains(" "))
{
    int k = word.IndexOf(" ") + 1;
    string ster = word.Substring(k);
    textbox1.Text = ster;
} else 
    textbox1.Text = "";
当然,这会搜索两次空间;一次用于Contains,一次用于indexOf。在性能关键型应用程序中(这不是一个问题,但有一天可能会成为一个考虑因素),我们可以通过移动以下索引进行一次搜索:

string word = textbox1.Text;
int k = word.IndexOf(" ") + 1;
if (k > 0)
{
    string ster = word.Substring(k);
    textbox1.Text = ster;
}else 
    textbox1.Text = "";

IndexOf返回-1表示“未找到”,然后+1将变为0;这意味着,通过询问
k
是否大于0,我们可以知道我们是否在最后一个单词,我们是否应该使用子字符串,或者只是将框清空如果
k==0
,然后将
textbox1.Text
设置为
字符串。Empty
?这不是很清楚,但我怀疑OP是在手动执行代码以一次删除一个单词时间,所以事实上,这个答案也会遇到同样的问题,一旦句子被简化为一个单词(没有空格可以匹配)@BDL,它确实会按照OP的要求删除第一个单词(即使我同意问题标题有误导性)。你是绝对正确的。而且这个标题有误导性。
textbox1.Text = string.Join(' ', textbox1.Text.Split(' ').Skip(1));