c# Substring doesn't find string

本文关键字:find string Substring doesn | 更新日期: 2023-09-27 17:50:21

我在lotHtmlOriginal中有这个段落。文本

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

我的问题是,当我制作子字符串</p>的第二部分时,代码失败,因为子字符串无法找到它,但当我将其更改为某些东西时,它工作。

它不工作,当我改变它太…

    计画
  • 特隆
  • p
  • </strong>

这是我的代码

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/</strong></p>之间的所有内容

c# Substring doesn't find string

看起来您想要从先前找到的位置(如string)开始查找特定的字符串。IndexOf:

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

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

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

    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;

我最终做的是修剪StfirstPart之前的字符,以简化代码。它限制了你需要做的算术来得到你想要的结果。

// 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>

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

int pTo = St.LastIndexOf(lastPart);
输出:

<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>

此代码将在firstPart开始后找到第一个"</p>"

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