我似乎无法绕过这个。怎么会变成:
string.Format(@"https://www.dropbox.com/s/{0}/{1}?dl=1", dl[rndIndex], rndIndex);
这样:
/3?dl=1/www.dropbox.com/s/s8ghw2mvld2jg0l
就像在{0}之后接受部分,将其移到前面并覆盖现有的字符串...... 有谁知道这里发生了什么?
这是整个代码(伪):
string[] dl = new string[] { "...", "...", "..." };
int rndIndex = rnd.Next(0, dl.Length);
Console.WriteLine(string.Format(@"https://www.dropbox.com/s/{0}/{1}?dl=1", dl[rndIndex], rndIndex));
dl []和rndIndex没有任何问题,检查了它们。
这解决了问题:
string s = dl[rndIndex];
s = s.Replace(((char)13).ToString(), "");
你的建议是什么。
答案 0 :(得分:7)
它替换URL开头的方式,似乎dl[rndIndex]
包含一个回车符,它将光标放回行的开头,然后覆盖URL的https:/
部分(适合/3?dl=1
的长度相同)。
所以你的格式化字符串实际上是这样的:
"https://www.dropbox.com/s/s8ghw2mvld2jg0l\r/3?dl=1"
^^
carriage return
现在,当打印到支持回车的控制台时,它将打印第一部分https://www.dropbox.com/s/s8ghw2mvld2jg0l
,然后将光标设置回到开头并打印其余部分/3?dl=1
。
所以你应该首先从字符串中删除所有回车符。无论如何,好像你的dl
数组不包含你期望的那样。
答案 1 :(得分:0)
我可以通过@ poke的评论重现确切的问题:
string.Format("https://www.dropbox.com/s/{0}/{1}?dl=1", "hfjdhfjdh\r", 30)
将输出:
/30?dl=1www.dropbox.com/s/hfjdhfjdh
问题是数组元素中的回车符或换行符。
答案 2 :(得分:0)
按如下方式修改您的片段:
string[] dl = new string[] { "...", "...", "..." };
int rndIndex = 1; // rnd.Next(0, dl.Length);
Console.WriteLine(string.Format(@"https://www.dropbox.com/s/{0}/{1}?dl=1", dl[rndIndex], rndIndex));
给出正确的答案。
https://www.dropbox.com/s/.../1?dl=1
所以,两个想法:
rnd.Next(0, dl.Length-1)