我有以下字符串:
string source = "Test/Company/Business/Department/Logs.tvs/v1";
/
字符是字符串中各种元素之间的分隔符。我需要获取字符串的最后两个元素。我为此目的有以下代码。这很好用。是否有更快/更简单的代码?
CODE
static void Main()
{
string component = String.Empty;
string version = String.Empty;
string source = "Test/Company/Business/Department/Logs.tvs/v1";
if (!String.IsNullOrEmpty(source))
{
String[] partsOfSource = source.Split('/');
if (partsOfSource != null)
{
if (partsOfSource.Length > 2)
{
component = partsOfSource[partsOfSource.Length - 2];
}
if (partsOfSource.Length > 1)
{
version = partsOfSource[partsOfSource.Length - 1];
}
}
}
Console.WriteLine(component);
Console.WriteLine(version);
Console.Read();
}
答案 0 :(得分:4)
为什么没有正则表达式?这个很容易:
.*/(?<component>.*)/(?<version>.*)$
您甚至可以为您的群组添加标签,以便您的匹配所需:
component = myMatch.Groups["component"];
version = myMatch.Groups["version"];
答案 1 :(得分:3)
以下应该更快,因为它只扫描尽可能多的字符串以找到两个/
并且它不会分割整个字符串:< / p>
string component = "";
string version = "";
string source = "Test/Company/Business/Department/Logs.tvs/v1";
int last = source.LastIndexOf('/');
if (last != -1)
{
int penultimate = source.LastIndexOf('/', last - 1);
version = source.Substring(last + 1);
component = source.Substring(penultimate + 1, last - penultimate - 1);
}
那就像所有表现问题一样:简介!尝试两个并排的大量现实输入,看看哪个是最快的。
(另外,如果输入中有 no 斜杠,这将留下空字符串而不是抛出异常...但如果source
为空则抛出,懒惰我。)< / p>
答案 2 :(得分:2)
您的代码大多看起来很好。有几点需要注意:
String.Split()
将永远不会返回null,因此您不需要对其进行空检查。source
字符串少于两个/
个字符,您会如何处理?答案 3 :(得分:2)
鉴于您正在寻找特定索引处的子字符串,您的方法是最合适的方法。在这种情况下执行相同操作的LINQ表达式可能不会改善代码或其可读性。
作为参考,Microsoft here提供了一些有关使用字符串和LINQ的重要信息。特别参见文章here,其中包含LINQ和RegEx的一些示例。
编辑:+1对于马特在RegEx方法中命名的小组......这是我见过的最好的解决方案。
答案 4 :(得分:1)
你可以试试这样的东西,但我怀疑它会快得多。您可以使用System.Diagnostics.StopWatch进行一些测量,看看您是否觉得有必要。
string source = "Test/Company/Business/Department/Logs.tvs/v1";
int index1 = source.LastIndexOf('/');
string last = source.Substring(index1 + 1);
string substring = source.Substring(0, index1);
int index2 = substring.LastIndexOf('/');
string secondLast = substring.Substring(index2 + 1);
答案 5 :(得分:-1)
您可以使用以下流程检索最后两个单词:
string source = "Test/Company/Business/Department/Logs.tvs/v1";
String[] partsOfSource = source.Split('/');
if(partsOfSourch.length>2)
for(int i=partsOfSourch.length-2;i<=partsOfSource.length-1;i++)
console.writeline(partsOfSource[i]);