Supongamos que tengo una cadena:
"34234234d124"
Quiero obtener los últimos cuatro caracteres de esta cadena que es "d124"
. Puedo usar SubString
, pero necesita un par de líneas de código, incluido el nombramiento de una variable.
¿Es posible obtener este resultado en una expresión con C #?
4 > mystring.length ? mystring : mystring.Substring(mystring.length -4);
"hello world"[-4:]
. Espero que una versión futura de C # lo haga tan fácil."hello world"[^4..]
:-)Respuestas:
Si está seguro de que la longitud de su cadena es de al menos 4, entonces es aún más corta:
fuente
mystring
tiene menos de 4 caracteres de longitud.Puedes usar un método de extensión :
Y luego llame:
fuente
Todo lo que tienes que hacer es..
fuente
Ok, entonces veo que esta es una publicación antigua, pero ¿por qué estamos reescribiendo el código que ya se proporciona en el marco?
Sugeriría que agregue una referencia a la DLL del marco "Microsoft.VisualBasic"
fuente
VisualBasic
espacio de nombres?TextFieldParser
Es otro ejemplo. ¿Por qué estas utilidades tienen un factor tan extraño?fuente
Usar Substring es en realidad bastante corto y legible:
fuente
Aquí hay otra alternativa que no debería funcionar demasiado mal (debido a la ejecución diferida ):
new string(mystring.Reverse().Take(4).Reverse().ToArray());
Aunque un método de extensión para este propósito
mystring.Last(4)
es claramente la solución más limpia, aunque un poco más de trabajo.fuente
Reverse().Take(4).Reverse()
no enumeraban toda la cadena, solo sucede en laToArray
llamada final . Si no hubiera tal cosa como ejecución diferida, se traduciría aReverse().ToArray().Take(4).ToArray().Reverse().ToArray()
. Esto, por supuesto, supone que esas extensiones son del tipo diferido, lo cual no verifiqué. Los constructores de cadenas no aceptan IEnumerable, por lo que debe enumerarlo en una matriz en ese punto.Simplemente puede usar el
Substring
método de C #. Por ej.Devolverá el resultado 0000.
fuente
startIndex
?Una solución simple sería:
fuente
fuente
=
no=+
.Es solo esto:
fuente
En comparación con algunas respuestas anteriores, la principal diferencia es que este código tiene en cuenta cuando la cadena de entrada es:
Aquí está:
fuente
Definición:
Uso:
Resultado:
de
fuente
Esto no fallará para cualquier cadena de longitud.
Probablemente esto sea excesivo para la tarea en cuestión, pero si necesita una validación adicional, posiblemente se pueda agregar a la expresión regular.
Editar: creo que esta expresión regular sería más eficiente:
fuente
Utiliza un genérico
Last<T>
. Eso funcionará con CUALQUIERAIEnumerable
, incluida la cadena.Y uno específico para cadena:
fuente
Reuní algunos códigos modificados de varias fuentes que obtendrán los resultados que deseas y además harás mucho más. He permitido valores int negativos, valores int que exceden la longitud de la cadena y para que el índice final sea menor que el índice inicial. En ese último caso, el método devuelve una subcadena de orden inverso. Hay muchos comentarios, pero avíseme si algo no está claro o simplemente es una locura. Estaba jugando con esto para ver para qué podría usarlo.
Entonces, si tiene una cadena como "Este es un método de extensión", aquí hay algunos ejemplos y resultados que puede esperar.
Esperemos que esta versión sea útil para alguien. Funciona de manera normal si no usa números negativos y proporciona valores predeterminados para parámetros fuera de rango.
fuente
fuente
suponiendo que desea las cadenas entre una cadena que se encuentra a 10 caracteres del último carácter y necesita solo 3 caracteres.
Digamos
StreamSelected = "rtsp://72.142.0.230:80/SMIL-CHAN-273/4CIF-273.stream"
En lo anterior, necesito extraer el
"273"
que usaré en la consulta de la base de datosfuente
Substring
ya te permite pasar un punto de inicio y una longitud, así que no estoy seguro de por qué no usarías eso en lugar de usarloRemove
para eliminar el principio primero.La actualización 2020 : C # 8.0 finalmente lo hace fácil:
También puede dividir matrices de la misma manera, ver Índices y rangos .
fuente