【问题标题】:Read just a part of a big string只读取大字符串的一部分
【发布时间】:2014-07-02 09:08:20
【问题描述】:

我有一个大字符串要阅读,它总是不同的,但一个词总是相同的。这个词是MESSAGE,所以如果我的字符串阅读器遇到这个词,它必须将整个字符串写入磁盘。我做了一些代码,但它不起作用,if 段永远不会触发,这里有什么问题?

string aLine;
StringReader strRead = new StringReader(str);
aLine = strRead.ReadLine();

if (aLine == "MESSAGE")
{
    //Write the whole file on disc
}

【问题讨论】:

  • if(aLine.Contains("Message");
  • 总是MESSAGE 还是也可以是Message?如果是这样:if(aLine.IndexOf("message", CultureInfo.InvariantCultureIgnoreCase) > -1)...
  • 是的,它总是 MESSAGE,这是字符串中的“硬编码”,就像一个“安全词”
  • @CrBruno:您还应该修剪空格,因此如果单词位于行首很重要,最好先使用Trimif(aLine.Trim().StartsWith("MESSAGE"))... 或只使用@987654328 @.

标签: c# string stringreader


【解决方案1】:

你可以使用包含,

if(aLine.Contains("MESSAGE")
{
}

【讨论】:

  • +1 反对反对票(不知道为什么有人反对票,实际上你是第一个建议使用Contains 的人)。
  • true - 我已经多次看到这个问题,用户在这里回答(不会说谁) - 我认为反对票是为了让他的回答上升
  • @restless - 代表农业 - 这是这个网站的第一大问题
【解决方案2】:

您可以使用String.Contains

if (aLine.Contains("MESSAGE"))

您也可以使用String.IndexOf,但由于索引在这里不相关,所以最好使用Contains

if (aLine.IndexOf("MESSAGE") != -1)

如果您需要忽略大小写或文化敏感性,那么 IndexOf 将为您提供重载方法,String.IndexOf(string value, StringComparison comparisonType)

if (aLine.IndexOf("MESSAGE", StringComparison.InvariantCultureIgnoreCase) != -1)

【讨论】:

  • 使用Contains不是更简单吗?
  • Contains 返回一个 bool 且不能与 int 进行比较!
  • 使用IndexOf,您可以提供StringComparison。这是不可能的(非char 版本)Contains
  • @Corak ...这里的问题是什么?
  • @Corak 是的,但是 OP 声明 one word is always the same 所以这里只需要使用 Contains 进行精确比较。
【解决方案3】:

您可以更改代码以使用Contains

            string aLine;
            StringReader strRead = new StringReader(str);
            aLine = strRead.ReadLine();

            if (aLine.Contains("MESSAGE"))
            {

              //Write the whole file on disc

            }

【讨论】:

    【解决方案4】:

    我想您可能正在寻找类似String.IndexOf 的东西。在这种情况下,您可以使用以下内容:

    if (aLine.IndexOf("MESSAGE") > -1)
    {
        ....
    }
    

    【讨论】:

    • @Adil 的回答中的相同评论,使用Contains 不是更容易吗?
    • 我不知道(直到现在)Contains 调用了IndexOf
    • -1 因为它是 > -1 并且因为如果你想不敏感地比较这只是一个好主意:aLine.IndexOf("MESSAGE", StringComparison.InvariantCultureIgnoreCase) > -1
    • @TimSchmelter 是对的:如果你有类似 aLine = "MESSAGE..." 的东西,这个是错的
    • 我已经修复了退货支票。至于大小写 - 由于 OP 明确使用“MESSAGE”,我认为它不区分大小写。 MSDN 文档的链接清楚地显示了允许不区分大小写检查的方法可用的重载。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-05
    • 2012-07-25
    • 2022-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多