Я занимаюсь разработкой службы REST, поэтому запрос может быть что-то вроде этого:Лучший способ управления и сравнить строки
/Data/Главная/Таблица = Клиенты/
Мне нужно, чтобы получить сегменты один за другим, и для каждого сегмента я решаю, какой объект я буду использовать, после того, как я передам этому объекту остальную часть запроса, чтобы он мог решить, что делать дальше. В основном, запрос REST - это путь по дереву: P
Это подразумевает множество операций со строками (в зависимости от сложности запроса), но StringBuilder полезен только для конкатенаций и удаления, вы не можете выполнять поиск с помощью IndexOf или аналогичного.
Я разработал этот класс, выполнять мои требования, но проблема в том, что манипулирует строки, поэтому каждый раз, когда я получаю один сегмент ... Я буду создавать дополнительные струны, потому что строка является inmutable типа данных:
public class RESTQueryParser
{
String _query;
public RESTQueryParser(String query)
{
_query = query;
}
public String GetNext()
{
String result = String.Empty;
Int32 startPosition = _query.StartsWith("/", StringComparison.InvariantCultureIgnoreCase) ? 1 : 0;
Int32 i = _query.IndexOf("/", startPosition, StringComparison.InvariantCultureIgnoreCase) - 1;
if (!String.IsNullOrEmpty(_query))
{
if (i < 0)
{
result = _query.Substring(startPosition, _query.Length - 1);
_query = String.Empty;
}
else
{
result = _query.Substring(startPosition, i);
_query = _query.Remove(0, i + 1);
}
}
return result;
}
}
Сервер должен поддерживать множество вызовов, а запросы могут быть огромными, поэтому это будет очень повторяющаяся задача. Я действительно не знаю, насколько велико влияние на память и производительность, я только что прочитал об этом в некоторых книгах.
Должен ли я реализовать класс, который управляет символом Char [] вместо строк и реализует методы, которые я хочу? Или должно быть хорошо с этим? Возможно, регулярные выражения?
UPDATE:
выше класс лишь небольшой aproximation, я все еще работаю над этим, и я должен разобрать более сложные узоры.
Я не могу использовать WCF REST или предопределенные пути (например, сопоставить регулярное выражение с конкретным методом), поскольку формат запроса может быть изменен пользователем во время выполнения. Поэтому он должен разбираться шаг за шагом.
Я не могу использовать String.Split, потому что, например, запрос может быть: «Data/Search = '01/01/2008»/«Независимо».
Если вы разделили на '/', по умолчанию у вас будут пустые записи в ваших результатах ... –
@Reed После того, как я нажал save, я увидел ваш и понял, что пропустил его. (хотя плохое копирование, хотя). – kemiller2002
Посмотрите, что я обновил, это мое плохое, чтобы не дать больше деталей, извините: P – vtortola