假设我的格式如下:
[val1].[val2].[val3] ...
从最后一个括号集[valx]
获取值的最佳方法是什么?
所以对于给定的例子
[val1].[val2].[val3]
结果为val3
答案 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();