获得给定子串的最佳方法

时间:2014-01-10 10:50:15

标签: c# .net

假设我的格式如下:

[val1].[val2].[val3] ...

从最后一个括号集[valx]获取值的最佳方法是什么?

所以对于给定的例子

[val1].[val2].[val3]

结果为val3

10 个答案:

答案 0 :(得分:4)

您必须首先定义 best ,在可读性或cpu周期方面最好?

我认为这是有效且可读的:

string values = "[val1].[val2].[val3]";
string lastValue = values.Split('.').Last().Trim('[',']');

Substring可以更有效率,但它不安全,因为您必须处理根本没有点的情况。

lastValue = values.Substring(values.LastIndexOf('.') + 1).Trim('[',']');

所以你需要先检查一下:

int indexOflastDot = values.LastIndexOf('.');
if(indexOflastDot >= 0)
{
    lastValue = values.Substring(indexOflastDot + 1).Trim('[',']');
}

答案 1 :(得分:2)

为了快速解决您的问题(所以不是结构性的),

我会说:

var startIndex = input.LastIndexOf(".["); // getting the last

然后使用Substring方法

var value = input.Substring(startIndex + 2, input.Length - (startIndex - 2)); // 2 comes from the length of ".[".

然后使用TrimEnd函数

删除“]”
var value = value.TrimEnd(']');

但这绝对是不是唯一的解决方案,而不适用于结构。只是您问题的众多答案之一。

答案 2 :(得分:0)

我假设你总是需要最后一个支撑。我会这样做:

string input = "[val1].[val2].[val3]";
string[] splittedInput = input.split('.');
string lastBraceSet = splittedInput[splittedInput.length-1];
string result = lastBraceSet.Substring(1, lastBraceSet.Length - 2);

答案 3 :(得分:0)

我想您想要访问valx。 我脑海中最简单的解决方案是:

        public void Test()
        {
            var splitted = "[val1].[val2].[val3]".Split('.');
            var val3 = splitted[2];
        }

答案 4 :(得分:0)

您可以使用以下内容:

string[] myStrings = ("[val1].[val2].[val3]").Split('.');

现在您可以通过索引访问。最后,您可以使用myStrings[myStrings.length - 1]

答案 5 :(得分:0)

提供val1 ... valN none 包含 '.', '[' or ']',您可以使用简单的 Linq 代码:

  String str = @"[val1].[val2].[val3]";
  String[] vals = str.Split('.').Select((x) => x.TrimStart('[').TrimEnd(']')).ToArray();

或者如果你想要的只是最后的值:

  String str = @"[val1].[val2].[val3]";
  String last = str.Split('.').Last().TrimStart('[').TrimEnd(']');

答案 6 :(得分:0)

    string str = "[val1].[val2].[val3]";
    string last = str.Split('.').LastOrDefault();
    string result = last.Replace("[", "").Replace("]", "");

答案 7 :(得分:0)

string input="[val1].[val2].[val3]";
int startpoint=input.LastIndexOf("[")+1;
string result=input.Substring(startpoint,input.Length-startpoint-1);

答案 8 :(得分:0)

我使用下面的正则表达式。一个警告是,如果在最后一对括号后面有不平衡的方括号,它将无法工作。尽管如此,大多数答案都会受到影响。

string s = "[val1].[val2].[val3]"
string pattern = @"(?<=\[)[^\]]+(?=\][^\[\]]*$)"
Match m = Regex.Match(s, pattern)

string result;

if (m.Success)
{
    result = m.Value;
}

答案 9 :(得分:-1)

我会使用正则表达式,因为从意图的角度来看它们是最明确的:

string input = "[val1].[val2].[val3] ...";
string match = Regex.Matches(input, @"\[val\d+\]")
                    .Cast<Match>()
                    .Select(m => m.Value)
                    .Last();