【问题标题】:Tokenize a string with delim of strings用字符串的分隔符标记一个字符串
【发布时间】:2011-07-23 21:19:09
【问题描述】:

如果我有一个类似的字符串

"这是一个字符串,会被这个和那个分割"

我想得到拆分结果

  1. "是一个将被"分割的字符串
  2. “还有那个”
  3. “这是一个字符串”
  4. “将被这个和分割”

1 和 2 被 "this" 分开 3和4被“that”分开

我的解决方案是使用字符串到字符串的映射,并将结果存储在另一个相同类型字符串到字符串的映射中。但是,对于更复杂和更长的文本,存储在 map 中的结果会重复,即在上面的 1 和 3 中,子字符串“is a string”被重复,这种冗余会产生不正确的统计结果。

您能否提供一个更好的解决方案来标记具有不同长字符串分隔符的长字符串?

【问题讨论】:

  • C、C++ 和 C# 都是不同的语言。你为一个人使用的东西不是你会为其他人使用的东西。那么您想要哪种语言的答案呢?
  • 您使用什么语言工作?这实际上与 Windows API 有什么关系?
  • 上述任何一种语言都可以,很抱歉忘记说明我可能只需要伪代码或解释方法即可。

标签: c# c++ c winapi


【解决方案1】:
string myString = "This is a string that will be splitted by this and that";
string foo = myString.ToUpper();

string[] byThis = foo.Split(new string[] { "THIS" }, StringSplitOptions.RemoveEmptyEntries);
string[] byThat = foo.Split(new string[] { "THAT" }, StringSplitOptions.RemoveEmptyEntries);

string[] all = foo.Split(new string[] { "THAT", "THIS" }, StringSplitOptions.RemoveEmptyEntries);

或者你可以使用正则表达式

string[] all = System.Text.RegularExpressions.Regex.Split(myString, "your pattern", System.Text.RegularExpressions.RegexOptions.IgnoreCase);

【讨论】:

  • 非常感谢您的代码。如果我不允许使用正则表达式,而只能使用列表、数组、字典,请您建议什么方法?
  • @Tokenized:不客气,如果这个答案回答了你的问题,那么你可以accept it,这样其他人就会知道它可以解决你的问题。
猜你喜欢
  • 2020-05-31
  • 2010-12-21
  • 1970-01-01
  • 2020-02-01
  • 2023-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多