11
votes

Détection d'où se trouve une nouvelle ligne dans une chaîne:

Je vois à l'aide de la visionneuse d'objet Visual Studio que ma chaîne est la suivante: xxx

Ce que j'ai besoin d'obtenir le texte du début à l'endroit où se trouve la nouvelle ligne.

Voici Ce que j'ai essayé, mais la méthode Indexof () renvoie -1, ce qui signifie qu'une nouvelle ligne n'est pas trouvée. xxx

Toute idée sur la manière de l'accomplir?


1 commentaires

@Sergio, je me rendais au CR + LF \ R \ N Windows Linebreak Vs. Nix Single Caractic Line Breaks, mais vous avez des réponses maintenant!


4 Réponses :


18
votes

C'est parce que Environnement.NewLine code> représente \ r \ n code> (un flux de ligne de retour de chariot + alimenter) alors que vous avez uniquement une alimentation en ligne dans votre chaîne source. Modifiez la deuxième ligne à ceci:

var x = stringEx.IndexOf("\n");


0 commentaires

2
votes

Si vous exécutez sur une plate-forme Windows, Environnement. Newline recherchera "\ r \ n".

essayez de rechercher \ n à la place: xxx


0 commentaires

6
votes

Si vous voulez juste que la première ligne de la chaîne, vous pouvez le faire:

static string GetFirstLine(string text)
{
    int? newlinePos = GetIndex(text, "\r") ?? GetIndex(text, "\n");

    if (newlinePos.HasValue)
    {
        return text.Substring(0, newlinePos.Value);
    }

    return text;
}

// Not really necessary -- just a convenience method.
static int? GetIndex(string text, string substr)
{
    int index = text.IndexOf(substr);
    return index >= 0 ? (int?)index : null;
}


0 commentaires

1
votes

Voici un moyen général de le faire qui va supprimer em> une nouvelle ligne et tout après la fin de la chaîne, mais uniquement lorsqu'une nouvelle ligne existe dans la chaîne:

int x = stringEx.IndexOf("\n");

if (x > 0) {
  stringEx= stringEx.Remove(x);
}


0 commentaires