gpt4 book ai didi

c# - 操作和比较字符串的最佳方法

转载 作者:太空宇宙 更新时间:2023-11-03 17:36:13 24 4
gpt4 key购买 nike

我正在开发一个 REST 服务,所以请求可能是这样的:

/数据/主/表=客户/

我需要一个接一个地获取这些段,对于每个段,我将决定我要使用的对象,在我将查询的其余部分传递给该对象之后,它可以决定下一步该做什么。基本上,REST 查询是树上的路径:P

这意味着很多字符串操作(取决于查询的复杂性),但 StringBuilder 仅对连接和删除有用,您不能使用 IndexOf 或类似方法执行搜索。

我已经开发了这个类来满足我的要求,但问题是操纵字符串,所以每次我得到一个段......我会创建额外的字符串,因为字符串是一种不可变的数据类型:

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[] 而不是 Strings 的类并实现我想要的方法吗?或者这个应该没问题?可能是正则表达式?

更新:

上面的类只是一个小的近似,我还在研究它,我必须解析更复杂的模式。

我不能使用 WCF REST 或预定义路径(例如将正则表达式映射到特定方法),因为用户可以在运行时更改查询格式。所以必须一步一步地解析。

我不能使用 String.Split,因为例如查询可能是:“Data/Search='01/01/2008'/Whatever”。

最佳答案

除非你反对使用它。我会在这里检查

http://msdn.microsoft.com/en-us/netframework/cc950529.aspx

WCF 为您处理 REST 实现。无需解析 URL。

如果您必须手动解析查询,我会使用

string[] queryParts = query.Trim('/').Split('/');

您可以单独浏览每个部分,而无需使用 IndexOf。

String.Split 方法:
http://msdn.microsoft.com/en-us/library/system.string.split.aspx

如果您不打算使用 WCF 并且它是 REST 实现,那么您要做的是将变量信息放在查询字符串参数中
/Data/Main/Table=Customers/  

真的需要:
/Data/Main?Table=Customers

或者
/Data/Main/Table/Customers

您将需要一种将路由路径与查询变量分开的方法。复杂性需要是查询字符串的一部分,而不是基本 URI 的一部分。然后你可以在 ? 之后分离出变量。并通过在 & 上拆分来分离每个查询表达式。
string[] uriAndQueryItems = query.Split('?');

if(uriAndQueryItems.Length > 1)
{
foreach(string queryItem in uriAndQueryItems.Split('&'))
{
//do something here.
}
}

关于c# - 操作和比较字符串的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2602271/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com