【问题标题】:c# Substring doesn't find stringc#子字符串找不到字符串
【发布时间】:2015-05-21 04:36:26
【问题描述】:

我的 lotHtmlOriginal.Text 中有这一段

waters71 </strong></p>
<p><strong>websitesss.com/sblogin/login.shtml/</strong><br />
<strong>1234213:123123</strong><br />
<strong>213123:12312</strong><br />
<strong>4213:196028</strong><br />
<strong>32131:43423</strong><br />
<strong>4444444:96980507</strong></p>
<p><strong>htt

我的问题是,当我制作子字符串&lt;/p&gt; 的第二部分时,代码失败,因为子字符串无法找到它,但是当我将其更改为某些内容时,它可以工作。

我也改了也没用...

  • htt
  • 电子战
  • p
  • &lt;/strong&gt;

这是我的代码

String St = lotHTMLOriginal.Text; ;
String firstPart = "blogin/login.shtml/</strong>";
String lastPart = "</p>";
int pFrom = St.IndexOf(firstPart) + firstPart.Length;
int pTo = St.IndexOf(lastPart);

String result = St.Substring(pFrom, pTo - pFrom);
lotHTML.Text = result;

为了以防万一,我正在尝试获取 blogin/login.shtml/&lt;/strong&gt;&lt;/p&gt; 之间的所有内容

【问题讨论】:

  • 坦白说,我不明白你想要做什么?
  • 我正在尝试获取 blogin/login.shtml/&lt;/strong&gt;&lt;/p&gt; 之间的所有内容
  • 因为IndexOf()只找到第一个,而你要的是最后一个?
  • @shole 没有找到firstPart之后的第一个?
  • 如果您知道要匹配的模式,为什么不使用正则表达式?

标签: c# substring


【解决方案1】:

您似乎想从先前找到的位置开始查找特定字符串,例如 string.IndexOf:

int pTo = St.IndexOf(lastPart, pFrom);

旁注:如果您需要大量 HTML 处理,使用 HTML 解析器(如 HtmlAgilityPack)可能更容易,而不是使用字符串匹配或正则表达式,但对于简单的一次性代码,子字符串是可以的。

【讨论】:

  • 这是完美的。谢谢
【解决方案2】:

我相信这将修复您代码中的错误。我在组合中添加了一个新变量。让我知道这是否有意义/有帮助。

    String St = lotHTMLOriginal.Text; ;
    String firstPart = "blogin/login.shtml/</strong>";
    String lastPart = "</p>";
    int pFrom = St.IndexOf(firstPart) + firstPart.Length;

    // these three lines changed
    string St_temp = St.Substring(pFrom);
    int pTo = St_temp.IndexOf(lastPart);
    String result = St.Substring(pFrom, pTo);

    lotHTML.Text = result;

我最终做的是在St 中修剪firstPart 之前的字符,以稍微简化代码。它限制了获得所需结果所需的算术运算。

// this is the result
<br />
<strong>1234213:123123</strong><br />
<strong>213123:12312</strong><br />
<strong>4213:196028</strong><br />
<strong>32131:43423</strong><br />
<strong>4444444:96980507</strong>

【讨论】:

    【解决方案3】:

    使用int pTo = St.IndexOf(lastPart);,您将获得第一个&lt;/p&gt; 的索引,但您正在寻找最后一个,所以我认为您应该使用

    int pTo = St.LastIndexOf(lastPart);
    

    输出:

    &lt;br /&gt; &lt;strong&gt;1234213:123123&lt;/strong&gt;&lt;br /&gt; &lt;strong&gt;213123:12312&lt;/strong&gt;&lt;br /&gt; &lt;strong&gt;4213:196028&lt;/strong&gt;&lt;br /&gt; &lt;strong&gt;32131:43423&lt;/strong&gt;&lt;br /&gt; &lt;strong&gt;4444444:96980507&lt;/strong&gt;

    【讨论】:

      【解决方案4】:

      此代码将查找 firstPart 开头之后的第一个 "&lt;/p&gt;"

      String lastPart = "</p>";
      int pFrom = St.IndexOf(firstPart) + firstPart.Length;
      int pTo = 0;
      while(pTo - pFrom < 0)
      {
          pTo = St.IndexOf(lastPart);
      }
      

      【讨论】:

        猜你喜欢
        • 2019-11-19
        • 2012-08-20
        • 2022-01-14
        • 1970-01-01
        • 2020-08-23
        • 2013-06-01
        • 2015-06-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多