2011-08-25 23 views
6

Hice una pregunta sobre la eliminación de espacios y pestañas. Ahora tengo algo más necesario. Necesito poder verificar si el primer carácter de una cadena es un espacio o pestaña. ¿Alguien puede pensar en una buena manera de hacer esto?¿Cómo puedo verificar si el primer carácter de mi cadena es un carácter de espacio o tabulación?

Gracias,

+0

¿solo un espacio o pestaña, o cualquier espacio en blanco? – Jodrell

+0

un espacio o pestaña. ¿Qué otro tipo de espacio en blanco hay? – Jason

+1

Vea aquí: http://en.wikipedia.org/wiki/Whitespace_character#Unicode –

Respuesta

6

se puede comprobar de esta manera:

if(myString[0] == ' ' || myString[0] == '\t'){ 
    //do your thing here 
} 

Este fallará para cuerdas emtpy y nulos, por lo que probablemente debería hacer que sea un poco más seguro así:

if(!string.IsNullOrEmpty(myString) && (myString[0] == ' ' || myString[0] == '\t')){ 
    //do your thing here 
} 
12

La mejor manera es utilizar el método Char.IsWhiteSpace:

// Normally, you would also want to check that the input is valid (e.g. not null) 
var input = "blah"; 

var startsWithWhiteSpace = char.IsWhiteSpace(input, 0); // 0 = first character 
if (startsWithWhiteSpace) 
{ 
    // your code here 
} 

La documentación del método menciona explícitamente qué espacio se considera exactamente blanco; Si por algún motivo la lista de caracteres no se ajusta a sus necesidades, deberá realizar una comprobación más restrictiva de forma manual.

+1

También puede usar 'char.IsWhiteSpace (entrada [0])' –

+1

Pruébelo con 'input =" "' ...;) – Lucero

+0

Debería verificar si la cadena no es nula o está vacía. Ver mi respuesta –

1
if (text[0] == ' ' || text[0] == '\t') 
+0

@downvoter: cuidado de elaporar por qué? ¿O solo en un viaje del ego? – Carsten

4

sólo iría con algo como:

if (str.StartsWith(" ") || str.StartsWith("\t")) { 
    ... 
} 

o:

if ((str[0] == ' ') || (str[0] == "\t")) { 
    ... 
} 

en realidad prefieren el anterior, ya que no tiene que preocuparse por problemas con las cadenas vacías.

Si desea manejar caso más complejo, en el futuro, se podría utilizar expresiones regulares, algo así como:

if (Regex.IsMatch (str, @"^\s")) ... 

Esto puede ser modificado para manejar los casos arbitrariamente complejas, aunque es un poco como matar moscas con una ojiva termo-nuclear para su caso particular.

+0

Peace Devil? Parece una combinación extraña ... –

+1

@ B.ClayShannon: originalmente el griego 'ειρήνη με το διάβολο', paz con el diablo (más paz con el lado oscuro de mi naturaleza) pero cambiado porque el latín (o lo que pasa en latín en mis círculos) fue más sucinto. Es solo un nick, uno que inventé cuando había demasiada gente en mi círculo de empleo con el mismo nombre que yo :-) – paxdiablo

3

Si no está solamente interesado en el espacio y pestaña, pero en el espacio en blanco, en general, utilizar esto:

if(!string.IsNullOrEmpty(myString) && char.IsWhiteSpace(myString[0])) 
    // It's a whitespace 
1

Y sólo por diversión:

if (Regex.IsMatch(input, @"^\s")) { 
    // yep, starts with whitespace 
} 

Tenga en cuenta que mientras que muchas de las otras respuestas fallará cuando se le dé una cadena vacía, ésta funcionará, y sería fácilmente extensible para que coincida con cosas más complejas que solo el espacio en blanco al comienzo de la cadena. Algunas personas encuentran que las expresiones regulares son excesivas para las comprobaciones simples, pero otros creen que si desea hacer una coincidencia de patrones en cadenas, debe usar expresiones regulares.

+0

@Downvoter, ¿te importaría comentar? – Lucero

1
if(myString[0]==' ' || myString[0]=='\t') 
{ 
    //do something 
} 
0

Deberá tener importado el espacio de nombres System.Linq.

var firstToken = yourString.FirstOrDefault(); 
if (firstToken == ' ' || firstToken == '\t') 
{ 
    // First character is a space or tab 
} 
else 
{ 
    // First character is not a space or tab, or string is empty. 
} 
+0

Funciona y cumple los requisitos ... –

Cuestiones relacionadas