2012-12-20 26 views
6

Ok, ho questa stringa con questa in "Average Man{[Attributes (Mind 10) (Body 10) (Soul 10)]}".C# Do-Loop che non aggiunge caratteri a una stringa

E ho questa configurazione del do-loop in modo che dovrebbe passare attraverso questa stringa di 1 carattere alla volta e vedendo se questo è "[" mentre si aggiunge ciascun carattere si controlla su un'altra stringa ContainerName. Il fatto è ContainerName ha solo questo in esso "[" e voglio che dovrebbe avere "Average Man{".

Se qualcuno mi può aiutare a capire perché questo sta accadendo e possibilmente una soluzione che la mia mente amatoriale potrebbe gestire sarei molto gentile.

O ya, ecco il mio codice.

int count = -1; 

string ContainerName = ""; 

//Finds Start of container 
do 
{ 
    count = count + 1; 
    ContainerName = ContainerName + Player.Character[count].ToString(); 
} while (Player.Character[count].ToString() != "[" && 
     Player.Character.Length - 1 > count); 

textBox1.Text = ContainerName; 
+7

Onestamente, la migliore risposta a questa la domanda è per refactoring il tuo codice - Player.Character dovrebbe essere una classe a sé stante, non una stringa che devi analizzare. –

+0

Non sarebbe un semplice Split() essere più facile? – Chrono

+0

Avrei dovuto ricordare che Player è di classe e Carattere è una stringa memorizzata al suo interno. –

risposta

1

Il tuo codice funziona bene (ho appena provato). ContainerName avrà valore "Average Man {[". Probabilmente Player.Charecter non ha il giusto valore. Ho usato Player.Charecter = "L'uomo medio {[Attributi (mente 10) (corpo 10) (Anima 10)]}"

Una soluzione più elegante sarebbe

TextBox1.Text = Player.Character.Substring(0, Player.Character.IndexOf('[')) 
+0

Grazie per aver risposto alla domanda. Ho scoperto che funziona anche. –

+0

In effetti lo fa, lol. Dopo averlo detto, ho notato che avevo una riga di codice che avevo trascurato che stava cambiando la mia stringa. Ops. Mi ci è voluta solo un'ora per notarlo. –

+0

La tua soluzione ha un aspetto migliore ma non posso dire di saperne abbastanza per capire cosa fa. –

1

sto assumendo carattere è una proprietà di stringa di giocatore, e si desidera la corda fino al primo [ o l'intera stringa se non esiste.

StringBuilder sb = new StringBuilder(); 
foreach (char c in Player.Character) 
{ 
    if (c == '[') 
     break; 
    sb.Append(c); 
} 
textBox1.Text = sb.ToString(); 

o

var i = Player.Character.IndexOf('['); 
textBox1.Text = i >= 0 ? Player.Character.Substring(0, i) : Player.Character; 
+0

Il secondo esempio non funziona. '.Substring (int)' restituisce tutto dopo l'indice quindi '" Average Man {[Attributes ".Substring (12) ==" [Attributes "', dove vogliono '" Average Man {"'. –

+0

Oops, infatti. Modificato su 'Substring (0, i)' – snurre

Problemi correlati