各位新年好!问个子字符串的问题

大狗狗 2009-01-30 07:44:46
string str = Environment.CommandLine;
string cmd;

//去掉可能存在的两侧""号(如果路径中有空格系统就会加一对"")
if (str.IndexOf('"') == 0)
{
cmd = str.Substring(1, str.Length - 2);
}

郁闷的是cmd开头没"号了,但未尾还有"号。我代码哪有问题?



...全文
140 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
大狗狗 2009-01-31
  • 打赏
  • 举报
回复
非常感谢lxcnn的回复!
-过客- 2009-01-30
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 Win32FanEx 的回复:]
怪了!!

string str = Environment.CommandLine;
string cmd = str.Trim('"');

这样也去不掉最后那个"号!
[/Quote]

这个倒没研究过,str会在结尾处加一个空格,有空研究下
string str = Environment.CommandLine; 
string cmd = str.Trim().Trim('"');


如果楼主只是用于这个地方,因为合法的路径中不会出现“"”,所以也可以直接Replace掉
string str = Environment.CommandLine; 
string cmd = str.Replace("\"", "");
大狗狗 2009-01-30
  • 打赏
  • 举报
回复
Oh My God !明白怎么回事了,举例说明:

"\"C:\\Documents and Settings\\pgd\\My Documents\\Visual Studio 2005\\Projects\\DocumentCentre\\RichEditTest\\bin\\Debug\\RichEditTest.exe\""

这就是CommandLine的存放形式。想在字符串中放上"符,就必需在它前面加个转义字符\
而前面我没有意识到转义符\的存在(它不会在输出时显示,但却是实实在在有的)所以
cmd = str.Substring(1, str.Length - 2);
应改为 cmd = str.Substring(1, str.Length - 3);

至于str.Trim--即然现在已有了一个比较满意的解决方法,这个就不再研究了,还有其它
任务呢
大狗狗 2009-01-30
  • 打赏
  • 举报
回复
怪了!!

string str = Environment.CommandLine;
string cmd = str.Trim('"');

这样也去不掉最后那个"号!
大狗狗 2009-01-30
  • 打赏
  • 举报
回复
感谢各位回贴!

由于需求比较简单,所以不想用正则表达式了。5楼朋友方法应是最好的方法了,另外我还想再和4楼朋友讨论下:

“你的代码只判断了str的开头有没有",若有就去掉。根本就没有处理末尾的。那末尾当然还是有那个"号了……

再加一个if段。或者用简单的正则。”


请看我代码:
if (str.IndexOf('"') == 0)
{
cmd = str.Substring(1, str.Length - 2);
}

str.Length - 2 这就是要把尾部的"号也去掉呀,可不知为啥去不掉呢?
-过客- 2009-01-30
  • 打赏
  • 举报
回复
[Quote=引用楼主 Win32FanEx 的帖子:]
string str = Environment.CommandLine;
string cmd;

//去掉可能存在的两侧""号(如果路径中有空格系统就会加一对"")
if (str.IndexOf('"') == 0)
{
cmd = str.Substring(1, str.Length - 2);
}

郁闷的是cmd开头没"号了,但未尾还有"号。我代码哪有问题?
[/Quote]

哪用那么麻烦,Trim()还有一个重载方法
string str = Environment.CommandLine; 
string cmd = str.Trim('"');


有饭先生 2009-01-30
  • 打赏
  • 举报
回复
你的代码只判断了str的开头有没有",若有就去掉。根本就没有处理末尾的。那末尾当然还是有那个"号了……

再加一个if段。或者用简单的正则。
HDNGO 2009-01-30
  • 打赏
  • 举报
回复
string s = "\"abcdefg\"";
Regex re = new Regex(@"""([^""]*)""");
Match m = re.Match(s);
if (m.Success)
{
Console.WriteLine(m.Groups[1].Value);
}


取双引号中间的字符串~
fengjian_428 2009-01-30
  • 打赏
  • 举报
回复
没看出有什么问题
你看看str里面装的是什么值
wuyq11 2009-01-30
  • 打赏
  • 举报
回复
string command = Environment.CommandLine;//获取进程命令行参数
string[] para = command.Split('\"');
if (para.Length > 3)
{
}

111,130

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧