如何在不同的字符之前获取特定字符的最后一个索引

时间:2015-11-22 05:50:59

标签: c# string lastindexof

抱歉,这对我来说很难解释。

我想获取最后一个新行字符的索引,该字符放在C#应用程序中的不同字符之前。

例如,我想要放在\n

之前的Hi的索引
"\n\n\n\n\nHi\n\n\n"

此外,我希望\n之后放置Hi的第一个索引。

我知道String.LastIndexOf有多种使用方法。我只是不知道我是否可以或如何使用它来获得我想要的东西。

修改

这是我到目前为止所做的。

int firstIndex=myString.IndexOf("\n")==0 ? 0 : -1;
int secondIndex=myString.Text.Trim().IndexOf("\n");

我想知道是否有更好或更标准的方法来做到这一点。

3 个答案:

答案 0 :(得分:1)

您可以使用Regex.Matches查找带图案的项目。一个简单的方法可以

using System;
using System.Text.RegularExpressions;

public class Program
{
    public static void Main()
    {
        var input = "\n\nHi\n\n\nTest\nTest";

        var matches = Regex.Matches(input, "\\n");

        for (int index = 0; index < matches.Count - 1; index++)
        {
            var match = matches[index];

            if (match.Index + 1 != matches[index + 1].Index)
            {
                Console.WriteLine("Last Match found at " + match.Index);
                Console.WriteLine("Next first Match found after last item at " + matches[index + 1].Index);
            }
        }

        Console.WriteLine("Last Match found at " + matches[matches.Count - 1].Index);
    }
}

将输出打印为

Last Match found at 1
Next first Match found after last item at 4
Last Match found at 6
Next first Match found after last item at 11
Last Match found at 11

答案 1 :(得分:0)

有很多方法可以给这只猫上皮。这是一个

string input = "\n\n\n\n\nHi\n\n\n";
string [] split = input.Split('\n');
int prevN = -1, nextN = -1;
for (int i = 0; i < split.Length; i++) {
     if (!String.IsNullOrEmpty(split[i])) {
        prevN = i - 1;
        nextN = i + split[i].Length;
        break;
    }
}
Console.WriteLine(prevN + "-" + nextN);

打印&#34; 4-7&#34;。这是对的吗?

答案 2 :(得分:0)

您可以尝试以下内容

static void Main(string[] args)
{
    int index = "\n\n\n\n\nHi\n\n\n".IndexOf("hi", StringComparison.OrdinalIgnoreCase);
    Console.WriteLine("\n\n\n\n\nHi\n\n\n".Split('i')[1].IndexOf("\n") + index);
    Console.WriteLine("\n\n\n\n\nHi\n\n\n".Split('i')[1].LastIndexOf("\n") + index);
}