子串最大长度

时间:2016-01-19 14:37:36

标签: c# asp.net string substring asp.net-4.5

我的长度大于150个字符的字符串。我想删除前17个字符,剩下的就剩下了。我在ASP.net 4.5中使用Substring方法,但是我在str0收到错误消息:" System.ArgumentOutOfRangeException"。

 public static string extract(string dirinfo)
 {
      Int32 lensub = Convert.ToInt32(dirinfo.Length);
      string str0 = dirinfo.Substring(17, lensub);
      return str0;
 } 

4 个答案:

答案 0 :(得分:6)

Substring(int, int)重载需要长度作为你想要的 rest 的第二个参数,而不是完整的字符串长度。

如果您的字符串长度为150,dirinfo.Substring(17, 150)表示;

  

从17开始作为一个位置,在后需要150个字符

这意味着,您的字符串至少需要167字符 ,但事实并非如此。这就是你得到ArgumentOutOfRangeException的原因。

只需使用Substring(int) overload;

string str0 = dirinfo.Substring(17);

描述;

  

从此实例中检索子字符串。子串从a开始   指定的字符位置并继续到字符串的末尾

顺便说一下,Length 已经 int,您无需解析它。

答案 1 :(得分:5)

你应该从len计算中删除常数17

 public static string extract(string dirinfo)
 {
      Int32 lensub = Convert.ToInt32(dirinfo.Length);
      string str0 = dirinfo.Substring(17, lensub-17);
      return str0;
 } 

否则返回的所需字符数大于字符串的剩余长度

当然,(归功于answer from Soner Gönül)你可以简化你的方法

 public static string extract(string dirinfo)
 {
      return (dirinfo.Length > 17 ? dirinfo.Substring(17) : "");
 } 

答案 2 :(得分:1)

string str0 = dirinfo.Substring(17, lensub-17);
return str0;

答案 3 :(得分:0)

  

我想删除第一个 17个字符,剩下的就剩下了。

然后完全按照自己的意愿行事

string str0 = dirinfo.Remove(0, 17);

参考:String.Remove Method (Int32, Int32)

public string Remove(int startIndex, int count)
  

返回一个新字符串,其中从指定位置开始的当前实例中指定数量的字符已删除