Как обрезать строку в .net

#.net

#.net

Вопрос:

Учитывая строку: /Projects/Multiply_Amada/MultiplyWeb/Shared/Home.aspx

Я хочу удалить все завершающие символы после третьего / , чтобы результат был: /Projects/Multiply_Amada/

Я хотел бы сделать это без использования Split или Charindex.

Комментарии:

1. Что вы имеете в виду под without use (Split/Charindex) ? Как следует удалять подстроку, не зная индекса, с которого начинать?

2. Согласен… Я подумал, что это довольно странное требование.

3. Не могли бы вы указать причину ваших требований? В противном случае это должно быть опубликовано на codegolf.stackexchange.com

Ответ №1:

Хорошо, ваши требования немного жесткие. Итак, что насчет этого:

 string RemoveAfterThirdSlash(string str)
{
    return str.Aggregate(
            new {
                sb = new StringBuilder(),
                slashes = 0
            }, (state, c) => new {
                sb = state.slashes >= 3 ? state.sb : state.sb.Append(c),
                slashes = state.slashes   (c == '/' ? 1 : 0)
            }, state => state.sb.ToString()
        );
}

Console.WriteLine(RemoveAfterThirdSlash("/Projects/Multiply_Amada/MultiplyWeb/Shared/Home.aspx"));
  

Комментарии:

1. как можно использовать агрегатную функцию для строки.. появится сообщение об ошибке (‘string’ не содержит определения для ‘Aggregate’ и не удалось найти метод расширения ‘Aggregate’, принимающий первый аргумент типа ‘string’ (вам не хватает директивы using или ссылки на сборку?)строка RemoveAfterThirdSlash(string str) Строка 65: { Строка 66: возвращает str. Агрегировать (строка 67: новая строка 68: {

2. Добавьте систему. Пространство имен Linq

Ответ №2:

 string str = "/Projects/Multiply_Amada/MultiplyWeb/Shared/Home.aspx";

string newStr = str.SubString(0,24);
  

Я полагаю, это отвечает на ваш вопрос!

Комментарии:

1. нельзя использовать подстроку, это повлияет на сервер link..so пожалуйста, дайте другое решение

Ответ №3:

Этот код достигает того, что вам нужно, но я бы предпочел сделать это в 1 строке, используя доступный .СЕТЕВЫЕ методы

 string str = "/Projects/Multiply_Amada/MultiplyWeb/Shared/Home.aspx";

int index = 0;
int slashCount = 0;

for (int i = 0; i < str.Length; i  )
{
    if (str[i] == '/' amp;amp; slashCount < 3)
    {
        index = i;
        slashCount  ;
    }
}

string newString = str.Substring(index   1);
  

Ответ №4:

Поскольку вы работаете с путями, вы можете сделать это:

     Public Function GetPartialPath(ByVal input As String, ByVal depth As Integer) As String

        Dim partialPath As String = input
        Dim directories As New Generic.List(Of String)

        Do Until String.IsNullOrEmpty(partialPath)
            partialPath = IO.Path.GetDirectoryName(partialPath)
            directories.Add(partialPath)
        Loop

        If depth > directories.Count Then depth = directories.Count

        Return directories.ElementAt(directories.Count - depth)

    End Function
  

Не тестировалось.