C#,.NET 3.5
这对我来说只是难闻,但我想不出另一种方式.
给定一个格式为"Joe Smith(jsmith)"(没有引号)的字符串,我想在括号内解析出'jsmith'字符串.我想出来了:
private static string DecipherUserName( string user )
{
if( !user.Contains( "(" ) )
return user;
int start = user.IndexOf( "(" );
return user.Substring( start ).Replace( "(", string.Empty ).Replace( ")", string.Empty );
}
Run Code Online (Sandbox Code Playgroud)
除了我对RegEx的健康厌恶之外,还有一种更简单的解析子字符串的方法吗?
编辑: 为了澄清,要解析的字符串将永远是:"乔史密斯(jsmith)"(没有引用).
Arn*_*hea 20
正则表达式是非常有用的,你可以为自己节省大量心痛,并学习它们.不是整个shebang,只是基础知识.
一个正常工作的正则表达式是"\ w + \((.*)\)" - jsmith将在Match.Groups [1]中.
一个简单的方法来获取正则表达式是找到一个网站,让你输入正则表达式和一些文本然后吐出匹配...
你不应该需要第一个替换,因为你可以只添加1到"("位置.
private static string DecipherUserName (string user) {
int start = user.IndexOf( "(" );
if (start == -1)
return user;
return user.Substring (start+1).Replace( ")", string.Empty );
}
Run Code Online (Sandbox Code Playgroud)
一种黑客...... ^^
return user.Substring(user.IndexOf('(') + 1).TrimEnd(')');
Run Code Online (Sandbox Code Playgroud)
如果不user
包含左括号,则IndexOf()
返回-1
,我们添加一个,得到零,并SubString()
返回整个字符串.TrimEnd()
除非用户的名字以右括号结尾,否则将无效.
如果user
包含一个IndexOf()
左括号,返回它的索引,我们通过添加一个来跳过左括号,然后用它提取其余的字符串Substring()
.最后,我们删除右括号TrimEnd()
.
如果用户字符串始终采用"Joe Smith(jsmith)"形式,则应该可以使用.
private static string DecipherUserName(string user)
{
string[] names = user.Split(new char[] {'(', ')'});
return names.Length > 2 ? names[1] : user;
}
Run Code Online (Sandbox Code Playgroud)
如果用户字符串始终是"Joe Smith(jsmith)",这将始终有效.
private static string DecipherUserName(string user)
{
return "jsmith";
}
Run Code Online (Sandbox Code Playgroud)
仅用于幽默目的的第二个条目.