C# 从指定位置对字符串进行反向计数

C# 从指定位置对字符串进行反向计数,c#,winforms,C#,Winforms,这似乎是一个新手问题,但我尝试了一个相反的问题。现在有点困惑,想试试另一个。我有一个要求,已经用ListBox尝试了以下操作: public Form1() { InitializeComponent(); listBox1.Items.Add("123456 - Hello World 1!"); listBox1.Items.Add("7891011 - Hello World 2!"); } private void button1_Click(object s

这似乎是一个新手问题,但我尝试了一个相反的问题。现在有点困惑,想试试另一个。我有一个要求,已经用
ListBox
尝试了以下操作:

public Form1()
{
    InitializeComponent();

    listBox1.Items.Add("123456 - Hello World 1!");
    listBox1.Items.Add("7891011 - Hello World 2!");
}

private void button1_Click(object sender, EventArgs e)
{
   foreach(var item in listBox1.SelectedItems)
   {
       int i = item.ToString().IndexOf('-') + 1;
       string msg = item.ToString().Substring(i);

       MessageBox.Show(msg);
   }
}
单击按钮时,它返回以下结果,我指的是(-符号后面的单词:

Hello World 2!
现在,我想尝试另一个应该返回以下内容的方法:

7891011
我可以这样做-

item.ToString().IndexOf('-') - 6;
但是我更喜欢一种更好的方法,任何想法都会受到欢迎-谢谢。

试试这个:

string data = item.ToString();
string msg = data.Substring(0, data.IndexOf('-') - 1);
或者,如果两者都需要,并且如果
-
周围的空格是必需的,则可以使用
-
作为拆分分隔符(注意空格):


有一个名为string的方法,它将拆分一个或多个字符,并返回所有不同部分的
string[]

在您的示例中:

string input = "7891011 - Hello World 2!";
string[] splitArray = input.Split('-');

//splitArray[0] = "7891011 "
//splitArray[1] = " Hello World 2!"
你可以从那里决定你想要的字符串的哪一部分。您也可以删除每个部分的空白,这样您就有了一个更“纯”的字符串

我做了一把小提琴来演示。

试试拆分

    private void button1_Click( object sender, EventArgs e )
    {
        foreach (string item in listBox1.SelectedItems)
        {
            string[] values = item.ToString().Split('-');                

            MessageBox.Show( values[0] );
            MessageBox.Show( values[1] );
        }
    }

拆分,在找到分隔符后剪切字符串,然后生成字符串数组,现在您可以使用所有分隔字符串

这类问题非常适合

根据字符拆分字符串后。。然后将该字符串生成一个数组。然后,只需调用所需字符串的索引

代码如下:

public class Program
{
    public static void Main()
    {
        var lstOfStrings = new List<string>();
        string stringOne = "123456 - Hello World 1!";
        string stringTwo = "7891011 - Hello World 2!";

        lstOfStrings.Add(stringOne);
        lstOfStrings.Add(stringTwo);

        foreach(var item in lstOfStrings)
        {
            var stringSplit = item.Split('-'); 
            /* split the item (in this case) in half where the character = '-'.. and store
             the result in an array object called stringSplit */

            var firstHalf = stringSplit[0].Trim();
            /* I want to get the 1st element of the
             array (0 based indexing) and then remove all of the white space */

            var secondHalf = stringSplit[1].Trim(); 
            /* I want to get the 2nd element of
            the array (0 based indexing) and then remove all of the white space */

            Console.WriteLine(firstHalf);
            Console.WriteLine(secondHalf);
        }

    }

}

// Output:

// 123456
// Hello World 1!
// 7891011
// Hello World 2!
公共类程序
{
公共静态void Main()
{
var lstOfStrings=新列表();
string stringOne=“123456-你好,世界1!”;
string stringTwo=“7891011-你好,世界2!”;
lstOfStrings.Add(stringOne);
lstofstring.Add(stringTwo);
foreach(字符串中的变量项)
{
var stringSplit=item.Split('-');
/*将项目(在本例中)一分为二,其中字符=“-”…并存储
结果将生成一个名为stringSplit的数组对象*/
var firstHalf=stringSplit[0]。Trim();
/*我想得到这个函数的第一个元素
数组(基于0的索引),然后删除所有空白*/
var secondHalf=stringSplit[1]。Trim();
/*我想得到第二个元素
删除数组(基于0的索引),然后删除所有空白*/
控制台写入线(上半部分);
控制台写入线(第二部分);
}
}
}
//输出:
// 123456
//你好,世界1!
// 7891011
//你好,世界2!
这是一个


使用
.Trim()
删除字符串中的空白。

您可以将对象绑定到列表框而不是字符串。这是一种更优雅的方法,也能解决您的问题

private void Form1_Load(object sender, EventArgs e)
{
    listBox1.Items.Add(new { Id = "123456", Text = "123456 - Hello World 1!" });
    listBox1.Items.Add(new { Id = "7891011", Text = "123456 - Hello World 2!" });
    listBox1.DisplayMember = "Text";
}
private void button1_Click(object sender, EventArgs e)
{
    foreach (dynamic item in listBox1.SelectedItems)
    {
        MessageBox.Show(item.Id);
    }
}

使用
.Split('-')
然后决定第一部分是
[0]
还是第二部分是
[1]
不是更容易吗?您是否尝试过使用string类的
Split()
方法?如果我能把所有的帖子都记下来作为答案那就太好了,但谢谢大家的想法,还有很长的路要走。你比我快把它打印出来了。这绝对是最好的选择,因为你很了解输入。哇,3个人写了相同的答案,其他人也被打败了,包括我。我猜这是一个相当简单的问题。这看起来很棒@Faruq-谢谢。
private void Form1_Load(object sender, EventArgs e)
{
    listBox1.Items.Add(new { Id = "123456", Text = "123456 - Hello World 1!" });
    listBox1.Items.Add(new { Id = "7891011", Text = "123456 - Hello World 2!" });
    listBox1.DisplayMember = "Text";
}
private void button1_Click(object sender, EventArgs e)
{
    foreach (dynamic item in listBox1.SelectedItems)
    {
        MessageBox.Show(item.Id);
    }
}