2014-05-10 3 views
0

J'ai une chaîne où sa forme avec délimiteurs comme:Rechercher une chaîne pour une valeur

string | time stamp in milliseconds | int counter | string 

Je dois être en mesure de saisir la valeur du compteur seulement. Il y aura un certain nombre de messages de sorte que l'horodatage et le compteur augmenteront avec chaque message. J'utilise un générateur de chaînes pour les messages entrants.

Quelle est la meilleure façon d'obtenir le compteur dans chaque message de chaîne entrant?

sb.Append(Encoding.ASCII.GetString(state.buffer, 0, bytesRead)); 
string content = sb.ToString(); 

Merci

+2

['content.Split (" | ") [2]'] (http://msdn.microsoft.com/fr-fr/library/system.string.split.aspx) –

+0

Je reçois une erreur –

+1

Oui désolé, cela aurait dû être un tableau de char au lieu d'une chaîne. Fondamentalement, voir la réponse de Hassan ci-dessous. –

Répondre

3

Si la chaîne vient comme ceci:

string strContent = "abc|1399718438000|100|def"; 

Vous pouvez utiliser Split méthode

int iCounter = Convert.ToInt32(strContent.Split(new char[] {'|'})[2]); 

ou de préférence en traitant avec un seul charbon pour diviser une chaîne .

int iCounter = Convert.ToInt32(strContent.Split('|')[2]); 
+1

Notez que puisque vous passez un caractère au lieu d'une chaîne, et que le paramètre est 'params', vous n'avez pas besoin d'ajouter explicitement un tableau. 'strContent.Split ('|')' fonctionnerait bien. –

+0

Merci d'avoir mentionné @Asad. J'ai mis à jour ma réponse. – Hassan

0

Vous pouvez également utiliser ceci:

int counter = Convert.ToInt32(strContent.Split('|').ToList().ElementAt(2)); 
+1

Pourquoi utiliser 'ToList(). ElementAt' au lieu d'accéder directement à' [2] '? À quoi ça sert? –

0

Split est un peu lourd ici. Il suffit d'obtenir les index du deuxième et du troisième séparateur et d'utiliser SubString pour obtenir la partie compteur.

Questions connexes