从指定位置反向计算字符串

时间:2018-02-27 16:45:37

标签: 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 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;

但是更愿意采用更好的方式去做,任何想法都会受到赞赏 - 谢谢。

5 个答案:

答案 0 :(得分:3)

试试这个:

string data = item.ToString();
string msg = data.Substring(0, data.IndexOf('-') - 1);

或者,如果您需要两者,并且-周围的空格是必需的,那么您可以使用-作为拆分分隔符(请注意空格):

string[] parts = item.ToString().Split(new[] {" - "}, StringSplitOptions.None);
string msg1 = parts[0];
string msg2 = parts[1];

答案 1 :(得分:3)

有一个名为Split()的字符串方法,它将在字符或字符串上拆分并返回所有不同部分的string[]

在你的例子中:

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

//splitArray[0] = "7891011 "
//splitArray[1] = " Hello World 2!"

您可以从那里决定所需字符串的“部分”。您也可以Trim()每个部分的空格,这样您就可以拥有更“纯粹”的字符串。

我做了一个小提琴here来演示。

答案 2 :(得分:1)

尝试拆分

    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] );
        }
    }

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

答案 3 :(得分:1)

此类问题非常适合String.Split

根据字符分割字符串后,字符串将变为数组。然后,只需调用所需字符串的索引。

以下是代码:

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!

这是working example

使用.Trim()从字符串中删除空格。

答案 4 :(得分:1)

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

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);
    }
}