Используя строку. Подстрока () как часть цепочки

Система. Среда. StackTrace даст Вам строку, которая включает текущий стек вызовов. Вы могли проанализировать это для получения информации, которая включает имена переменной для каждого вызова.

5
задан bzlm 18 November 2009 в 08:44
поделиться

8 ответов

Вы можете написать метод расширения RightStrip () . Вы не можете перегрузить SubString для отрицательных начальных позиций.

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);
13
ответ дан 18 December 2019 в 08:28
поделиться

Создайте класс расширения, подобный этому:

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;
    }
}  

Назовите его:

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

4
ответ дан 18 December 2019 в 08:28
поделиться

Помимо того, что все остальные упоминали термин «цепочка методов» или то, что некоторые называют свободным интерфейсом, у меня было одно или два примечания, которые я хотел добавить.

1
ответ дан 18 December 2019 в 08:28
поделиться

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

Однако я считаю это плохой идеей, так как присваивание mystring не делает ' Это происходит до тех пор, пока после всех манипуляций и изменения длины строки в предыдущих вызовах не произойдет неожиданное поведение.

0
ответ дан 18 December 2019 в 08:28
поделиться

Цепочка методов - это термин, который вам нужен. Это правда, что вы не можете передать такой отрицательный символ, но вы все равно можете связать методы:

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

, так как замена строки в этом случае не влияет на длину строки

0
ответ дан 18 December 2019 в 08:28
поделиться

В продолжение комментария Konamiman:

Просто потому, что PHP допускает причудливые (и откровенно грязные и опасные) перегрузки и параметры, такие как отрицательное начало и количество в SubString, это не означает это правильный, правильный или правильный способ сделать это.

Substring (0, mystring.Length - 1) - это де-факто способ обрезать последний символ строки в самых разных языков.

0
ответ дан 18 December 2019 в 08:28
поделиться

Вы всегда можете использовать регулярное выражение:

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

Кроме того, поскольку вы просто собираетесь удалить этот последний символ, не имеет значения, был ли он '_' который был заменен на ». Это будет работать нормально:

mystring = mystring.Substring(0, mystring.Length - 1).Replace('_', ' ');
0
ответ дан 18 December 2019 в 08:28
поделиться

В вашем примере вы связываетесь с методом, который не изменяет длину исходной строки. Отсюда ответы, предлагающие использовать SubString с (originalLength-1), что, конечно, не работает в общем случае.

Ответ, как вы, кажется, поняли, - вы не можете сделать это в общем случае, когда предыдущие методы в цепочке изменили длину.

Но вы можете написать свой собственный метод расширения в 3.5, чтобы делать то, что вы хотите. Что-то вроде следующего или его варианта:

public static string PhpSubstring(this string value, int length)
{
    if (length < 0) length = value.Length - length;
    return String.Substring(value, length);
}
1
ответ дан 18 December 2019 в 08:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: