2011-01-23 15 views
6

que ver con el visor de Visual Studio objeto que mi cadena es:donde se encuentra una nueva línea en una cadena:

"_profileIconId = 5\n   elo" 

Lo que necesito para obtener el texto de principio a donde la nueva línea es.

Esto es lo que he intentado, pero el método IndexOf() devuelve -1, lo que significa que no se encuentra una nueva línea.

var stringEx = "_profileIconId = 5\n   elo"; 
var x = stringEx.IndexOf(Environment.NewLine); 
stat.Name = tempName.Substring(0,x); 

¿Alguna idea sobre cómo lograr esto?

+0

¿Está ejecutando en Windows? –

+0

Windows 7. (relleno) –

+0

@Sergio Estaba llegando a los saltos de línea CR + LF \ r \ n Windows linebreak frente a * nix, pero ahora tiene algunas respuestas. –

Respuesta

12

Eso es porque Environment.NewLine representa (un retorno de carro + avance de línea) mientras que solo tiene un avance de línea en la cadena de origen. Cambie la segunda línea a esto:

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

Si se está ejecutando en una plataforma Windows, Environment.NewLine buscará "\ r \ n".

Trate de buscar \ n en su lugar:

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

Si lo que desea es la primera línea de la cadena, se puede hacer esto:

static string GetFirstLine(string text) 
{ 
    using (var reader = new StringReader(text)) 
    { 
     return reader.ReadLine(); 
    } 
} 

Los StringReader clase aborda diversos salto de línea escenarios para ti. De the MSDN documentation:

Una línea se define como una secuencia de caracteres seguido por un avance de línea ("\ n"), un retorno de carro ("\ r"), o un retorno carro inmediatamente seguido por un avance de línea ("\ r \ n").

Por supuesto, si usted no quiere que la sobrecarga de la construcción de un nuevo StringReader objeto (aunque dudo que sea tan grande), se puede aplicar algo similar a ti mismo:

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

Aquí está una manera general, para hacer esto que eliminar una nueva línea y todo después de que a partir de la cadena, pero sólo cuando existe una nueva línea en la cadena:

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

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