如何在C#中以反向模式进行子字符串操作

5

我的字符串是“csm15+abc-indiaurban@v2”。我只想从中获取“indiaurban”。目前我正在做的是:

var lastindexofplusminus = input.LastIndexOfAny(new char[]{'+','-'});

var lastindexofattherate = input.LastIndexOf('@');

string sub = input.Substring(lastindexofplusminus,lastindexofattherate);

但是出现了错误 "索引和长度必须引用字符串内的位置。"。 谢谢您的提前帮助。

2
"索引和长度" - 您正在传递两个索引。 - Blorgbeard
那么如何仅获取“indiaurban”?能否请您提供正确的子字符串。 - N2J
1
你理解我的评论了吗?如果是的话,你应该能够自己解决它。 - Blorgbeard
6个回答

9

在想要截取的 Substring 中,应该将 length 放在第二个参数中(而不是传递另一个索引)。鉴于您知道这两个索引,将其转换为长度相当简单:

string sub = input.Substring(lastindexofplusminus + 1, lastindexofattherate - lastindexofplusminus - 1);

请注意,在您的lastindexofplusminus后面需要+1才能获取字符。在它们之间获取子字符串需要-1,减去lastindexofattherate本身。

2
您可以简单地反转字符串,根据位置和长度应用子字符串,然后再次反转。
string result = string.Join("", string.Join("", teste.Reverse()).Substring(1, 10).Reverse());

或者创建一个函数:

public static string SubstringReverse(string str, int reverseIndex, int length) {
    return string.Join("", str.Reverse().Skip(reverseIndex - 1).Take(length));
}

这里可以查看函数的工作情况!!


SubstringReverse 函数中,你漏掉了一个 Reverse。应该是 str.Reverse().Skip(reverseIndex - 1).Take(length).Reverse() - stomy
索引通常是从零开始的。如果使用Skip(reverseIndex)会更清晰易懂。 - stomy

1
你可以使用 LINQ:
string input = "csm15+abc-indiaurban@v2";

string result = String.Join("", input.Reverse()
                                     .SkipWhile(c => c != '@')
                                     .Skip(1)
                                     .TakeWhile(c => c != '+' && c != '-')
                                     .Reverse());

Console.WriteLine(result); // indiaurban

我喜欢“Reverse()”这个想法。 - stomy

0

我不知道什么是标识您的断点,但这里有一个可用的示例

您可以在String.Substring Method (Int32, Int32)了解更多相关信息。

String s = "csm15+abc-indiaurban@v2";
        Char charRange = '-';
        Char charEnd = '@';
        int startIndex = s.IndexOf(charRange);
        int endIndex = s.LastIndexOf(charEnd);
        int length = endIndex - startIndex - 1;
        Label1.Text = s.Substring(startIndex+1, length);

0

2 个扩展方法:

    public static string SubstrReverse(this string str, int reverseIndex, int length)
    {
        var startPos = str.Length -reverseIndex;
        return string.Join("", 
            str.Reverse()
            .Skip(startPos)
            .Take(length).Reverse());
    }

    public static string SubstrReverse(this string str, int reverseIndex)
    {
        var startPos = str.Length - reverseIndex;
        return string.Join("", 
            str.Reverse()
            .Skip(startPos)
            .Reverse());
    }

-3

假设你的字符串总是以那种格式出现

string str = "csm15+abc-indiaurban@v2";
string subSTr = str.Substring(10).Substring(0,10);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接