#.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
Не тестировалось.