Esta parece ser una pregunta novata, pero he intentado una inversa. Ahora un poco confundido para probar otro. Tengo un requisito y ya probé lo siguiente con 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);
   }
}

Al hacer clic en el botón, devuelve el siguiente resultado, quiero decir las palabras después del signo (-) :

Hello World 2!

Ahora me gustaría probar el otro que debería devolver lo siguiente:

7891011

Puedo hacerlo de esta manera.

item.ToString().IndexOf('-') - 6;

Pero preferiría una mejor manera de hacerlo y cualquier idea sería apreciada. Gracias.

0
user8512043 27 feb. 2018 a las 19:45

5 respuestas

La mejor respuesta

Prueba con esto:

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

Alternativamente, si necesita ambos, y si los espacios alrededor de - son obligatorios, puede usar - como un separador dividido (tenga en cuenta los espacios):

string[] parts = item.ToString().Split(new[] {" - "}, StringSplitOptions.None);
string msg1 = parts[0];
string msg2 = parts[1];
3
Zoran Horvat 27 feb. 2018 a las 16:47

Hay un método de cadena llamado Split() que se dividirá en un carácter (s) o cadena y devolverá un string[] de todas las partes diferentes.

En tu ejemplo:

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

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

Puede decidir qué "parte" de la cadena desea desde allí. Puede Trim() el espacio en blanco fuera de cada parte también para que tenga una cadena más "pura".

Hice un violín aquí para demostrarlo.

3
maccettura 27 feb. 2018 a las 16:52

Puede vincular objetos a ListBox en lugar de cadenas. Este es un enfoque más elegante y también resuelve su problema.

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 feb. 2018 a las 17:11

Este tipo de pregunta es perfecta para String. Split.

Una vez que una cadena se divide en función del carácter ... la cadena se convierte en una matriz. Luego, simplemente llame al índice de la cadena deseada.

Aquí está el código:

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!

Aquí hay un ejemplo de trabajo

Use .Trim() para eliminar el espacio en blanco de las cadenas.

1
Grizzly 27 feb. 2018 a las 17:01

Intenta dividir

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

Dividir, cortar la cadena cuando encuentre un carácter separador, luego generar una matriz de cadenas, ahora puede usar todas las cadenas separadas

1
henoc salinas 27 feb. 2018 a las 16:51