Кажется, это вопрос новичка, но я попробовал обратный. Теперь немного запутался, чтобы попробовать другой. У меня есть требование, и я уже попробовал следующее с 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;

Но я бы предпочел лучший способ сделать это, и любая идея будет оценена - спасибо.

0
user8512043 27 Фев 2018 в 19:45

5 ответов

Лучший ответ

Попробуйте с этим:

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];
3
Zoran Horvat 27 Фев 2018 в 16:47

Существует метод строки, который называется Split(), который разделится на символ (ы) или строку и вернет string[] всех различных частей.

В вашем примере:

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

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

Вы можете решить, какую «часть» строки вы хотите оттуда. Вы можете Trim() пробелы в каждой части тоже, так что у вас есть более "чистая" строка.

Я сделал скрипку здесь для демонстрации.

3
maccettura 27 Фев 2018 в 16:52

Вы можете привязывать объекты к 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);
    }
}
1
Faruq 27 Фев 2018 в 17:11

Этот тип вопроса идеально подходит для строки. 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!

Вот рабочий пример

Используйте .Trim() для удаления пробелов из строк.

1
Grizzly 27 Фев 2018 в 17:01

Попробуйте разделить

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

Split, вырезать строку при обнаружении символа-разделителя, затем генерировать массив строк, теперь вы можете использовать все разделенные строки

1
henoc salinas 27 Фев 2018 в 16:51