什么';是C#中Java子字符串的等价物吗?

什么';是C#中Java子字符串的等价物吗?,c#,substring,C#,Substring,当我想在Java中使用子字符串来查找字符串中的文本区域时,我提供了两个索引,一个用于开始,一个用于结束,但在C#中,我被迫提供子字符串的长度作为参数,但是如果我不知道应该在哪里停止,这会成为一个问题,让我有了这样的东西: verse[i].Substring(verse[i].IndexOf("start"), (verse[i].IndexOf("end") - verse[i].IndexOf("start")); string helloWorld = "startHello World

当我想在Java中使用
子字符串
来查找字符串中的文本区域时,我提供了两个索引,一个用于
开始
,一个用于
结束
,但在C#中,我被迫提供
子字符串的长度作为参数,但是如果我不知道应该在哪里停止,这会成为一个问题,让我有了这样的东西:

verse[i].Substring(verse[i].IndexOf("start"), (verse[i].IndexOf("end") - verse[i].IndexOf("start"));
string helloWorld = "startHello Worldend".MySubstring("start", "end");
string vers = verse[i].MySubstring("start", "end");
而不仅仅是

令人恼火的是,我一次又一次地遇到这个问题,我想知道是我是唯一一个还是有一个我不知道的窍门。你如何才能最好地解决这个问题?(考虑清洁度和速度)


ps:我不喜欢为几乎所有的事情创建变量。谢谢

您可以像这样编写自己的扩展方法

var newstr = str.MySubString(start,end);


尝试以下扩展方法:

public static class StringExtensions
{
    public static string MySubstring(this string s, string start, string end)
    {
        int startI = s.IndexOf(start);
        int endI = s.IndexOf(end, startI);
        return s.Substring(startI, endI - startI + 1);
    }
}
像这样使用它:

verse[i].Substring(verse[i].IndexOf("start"), (verse[i].IndexOf("end") - verse[i].IndexOf("start"));
string helloWorld = "startHello Worldend".MySubstring("start", "end");
string vers = verse[i].MySubstring("start", "end");
有时,扩展方法可以挽救你的生命。您只需要知道,如果静态类是公共的,并且在您的命名空间中,那么使用您的命名空间的每个人都会得到您的扩展。

OP询问“C#中Java子字符串的等价物是什么?”?我很高兴看到响应,因为我正在将使用String.substring的Java方法转换为C#。然而,根据官方Java文档, 这对我来说不仅仅是一个微小的区别,因为我想用最少的努力将Java转换成C。上面提到的扩展是一个很好的答案,我当然可以接受。但出于我的需要,更精确的类似Java的版本应该是returns.Substring(start,end-start);不启动+1

使用Java文档示例,测试表明这是正确的:

[TestMethod]
    public void TestSubString()
    {
         Assert.AreEqual("urge", "hamburger".MySubstring( 4, 8));
        Assert.AreEqual("mile", "smiles".MySubstring(1, 5));
    }

你接受的答案是错误的,因为你问错了

在java中,当您调用子字符串(START,END)时,您会得到一个子字符串,它从START开始,到END-1结束

在c#中,你只需像这样打电话:

Substring(START, END - START);

如果按照建议添加1,将得到不同的字符串。

可以使用扩展方法。谷歌搜索。@nawfal他的论点是int-s。请参见
索引
您是对的,乍一看似乎是对的。已取消……)nawfal是对的,参数是
string
s而不是
int
s。这个答案就像问题的重复,仔细看看这个问题。我不想只使用
start
end
(字符串)在一条语句中获取子字符串。@rtuner仔细看看答案。它的工作原理类似于Java的substring
str.MySubString(start,end):)哈哈,很好。但它只是重复我正在避免的东西,即(开始,结束-开始+1)。。我不认为这是明智的表现。