Pregunta

Estoy intentando maniplulate una cadena sin hacer un gran problema de ella y de transmitirla a cabo en varias líneas, por lo que estoy usando alguna de encadenamiento para lograrlo. La pregunta que tengo es, ¿cómo se utiliza string.Substring() dejar caer el último carácter de mi cadena en este contexto

En PHP que puede pasar un número negativo como argumento (es decir substr(-1)) para lograr esto, pero obviamente no es así como obras de C #.

mystring = mystring.Replace('_', ' ').Substring(???);

Además, ¿cuál es el nombre real de la técnica antes mencionado? Siempre referido a ella como una cadena de devolución de llamada, sino una cadena de devolución de llamada Ahora pienso es algo completamente diferente.

Tenga en cuenta que quiero evitar:

mystring = mystring.Replace('_', ' ');
mystring = mystring.Substring(0, mystring.Length - 1);

Gracias de antemano por su tiempo y amable consideración.

Iain

Gracias por sus respuestas chicos. Es curioso que las personas pueden tener opiniones tan fuertes acerca de la manipulación de cadenas y otras lenguas "compiten":)

¿Fue útil?

Solución

Se puede escribir un método de extensión RightStrip(). No se puede sobrecargar subcadena para posiciones de inicio negativas.

static string RightStrip(this string s, int n)
{
    return s.Substring(0, s.Length - n);
}


string s = "Hello World!";
s = s.Replace('e', 'a').RightStrip(1);

Otros consejos

Crea una clase de extensión de la siguiente manera:

public static class MyStringExtensions
{
    public static string RemoveCharactersFromEnd(this string s, int n)  
    {  
        string result = string.Empty;  

        if (string.IsNullOrEmpty(s) == false && n > 0)
        {
            result = s.Remove(s.Length - n, n);
        }

        return result;
    }
}  

Lo llaman:

Console.WriteLine("test!!".RemoveCharactersFromEnd(2));

En su muestra, está encadenando a un método que no cambia la longitud de la cadena original. Por lo tanto respuestas que sugiere el uso de subcadena con (originalLength-1), que por supuesto no funciona en el caso general.

La respuesta como parece que se han dado cuenta es - no se puede hacerlo en el caso general, donde los métodos anteriores de la cadena han modificado la longitud

.

Sin embargo, usted puede escribir su propio método de extensión de 3,5 a hacer lo que quiera. Algo así como la siguiente o una variante del mismo:

public static string PhpSubstring(this string value, int length)
{
    if (length < 0) length = value.Length - length;
    return String.Substring(value, length);
}

Además de todos los demás mencionar el término método de encadenamiento, o lo que algunos llaman una interfaz fluida, tuve una o dos notas que quería añadir.

Lo que quería sugerir es que lo bueno de métodos extensión es que se puede definir fácilmente su propio tipo de funciones de transformación que se sienten de la misma, ya que, como los métodos del sistema tales como reemplazar y ToLower , etc .... algo que toma un poco de entrada y devuelve algún tipo de cadena transformada.

La transformación en particular está solicitando (cortar el extremo derecho char) podría parecer torpe si usted tiene que utilizar Subcadena directamente, pero se puede ocultar esta lejos cuidadosamente en algo como:

public string CutOff(this string s, int c)
{
    return s.Substring(0, s.Length - c);
}

...

return myVal.CutOff(1);

(o, al menos, creo que esto debería funcionar!)

Mucha suerte!

método de encadenamiento es el término que estés buscando. Es cierto que no se puede pasar un carácter negativo de esa manera, pero todavía se puede encadenar los métodos:

mystring = mystring.Replace('_', ' ').Substring(0, mystring.Length - 1);

ya que la cadena de sustituir, en este caso, no afecta a la longitud de la cadena

mystring = mystring.Replace ( '_', ' ') .Remove (mystring.length -1)

Sin embargo, me parece que es una mala idea ya que la asignación de mystring no ocurre hasta después de todo, la manipulación y el cambio en la longitud de la cadena en las llamadas anteriores dará lugar a un comportamiento inesperado.

Para más comentarios de Konamiman:

El hecho de que PHP permite extraña (y francamente sucio y peligroso) las sobrecargas y los parámetros tales como aperturas negativos y los recuentos de subcadena, eso no quiere decir que es la derecha, de forma correcta o adecuada de hacerlo.

Subcadena (0, mystring.Length - 1). Es el de facto forma de recorte de la última letra de una cadena en una amplia variedad de idiomas

Siempre se puede utilizar expresiones regulares:

mystring = new Regex("^(.*).$").Match(mystring.Replace('_', ' ')).Groups[1].Value;

Además, dado que sólo vamos a quitar ese último carácter, no importa si fue un '_' que quedó sustituido por un ' '. Esto funcionaría bien:

mystring = mystring.Substring(0, mystring.Length - 1).Replace('_', ' ');
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top