2011-02-25 170 views
2

我有一個字符串,它說有3000個字符,現在我想拆分成數組,每個索引不超過500個字符,我沒有得到相同的邏輯。我想下面的一個,但它不工作..如何根據字符長度拆分字符串

說串改編拿着3000個字符...

我使用的是循環獲得的500

我在這裏存儲的值中的字符長度在陣列中的環回...

ArrayList ar = new ArrayList(); 

for(int i=0; i < arr.Length; i+=500) 
{ 
    ar.Add(arr.Substring(i,500)); 
} 

Response.Write(ar[0].ToString()); 

但是,這將引發一個錯誤消息說

索引和長度必須引用字符串中的位置。

請以相同的代碼回覆,任何答覆將不勝感激。

回答

2

的問題是,您的ARR-string是不總是500長。如果你到了最後,它可能只有300個字符。嘗試將500個字符從子字符串中取出會導致超出範圍的錯誤。

你應該檢查你的arr的長度,當你子串。如果它比你的500字符串字符串短,你應該把整個字符串,而不是試圖進一步子串。

7

幾點:

您可能需要測試「我< arr.length - 1」,當您到達結束的字符串的最後一個指標是2999,長度爲3000

你也可能需要概括結束點,因爲您假設字符串是500個整數。如果你的字符串長2900,那麼最後一個字符串應該是arr.Substring(i,400)。

也許嘗試

for(int i=0; i < arr.Length; i+=500) 
{ 
    ar.Add(arr.Substring(i, Math.Min(arr.length - i,500))); 
} 
+0

'我 davehauser 2011-02-25 13:09:12

+0

真的很不錯的解決方案!但是你必須在第三行刪除'-1',否則結果中缺少最後一個字符:'ar.Add(arr.Substring(i,Math.Min(arr.length - i,500))) ;' – davehauser 2011-02-25 16:13:23

+0

好的,按照註釋編輯 – 2011-02-25 21:07:25

0

更改爲

for(int i=0; i < arr.Length-1; i+=500) 
{ 
    ar.Add(arr.Substring(i,500)); 
} 
0

嘗試更改爲

for(int i=0; i < arr.Length; i+=500) 
{ 
    int len=500; 
    if(arr.Length<i+500) 
    { 
     len=arr.Length; 
    } 
    ar.Add(arr.Substring(i,len)); 
} 
0

嘗試......

static void Main(string[] args) 
    { 
     StringBuilder sb = new StringBuilder(); 
     string str = string.Empty; 

     for (int i = 0; i < 3001; i++) 
      sb.Append("a"); 

     str = sb.ToString(); 

     ArrayList arrayList = new ArrayList(); 
     int length = str.Length; 
     int size = 500; 
     int start = 0; 

     while (length > 0) 
     { 
      if (length >= size) 
       arrayList.Add(str.Substring(start, size)); 
      else 
       arrayList.Add(str.Substring(start, length)); 

      start += size; 
      length -= size; 
     } 

     Console.Write(arrayList[0].ToString()); 
    } 
0
string str = "Sample Text"; 

     List<string> lst = new List<string>(); 
     while (str.Length > 500) 
     { 
      var temp = str.Substring(0, 500); 
      str = str.Remove(0, temp.Length); 
      lst.Add(temp); 
     } 

     lst.Add(str); 

     string[] arrayString = lst.ToArray(); 
     Console.ReadLine(); 
0

除了給出答案,在這裏是一種替代方法:

List<string> ar = new List<string>(); 

int charcount = 500; 
int index = 0; 
do 
{ 
    ar.Add(new string(input.Skip(index).Take(charcount).ToArray())); 
    index += charcount; 
} while (index < input.Length); 

首先,它使用List<string>而不是ArrayListArrayList是不是類型安全的,並且基本上不應該使用;它仍然主要是出於向後兼容性的原因)。

其次,由於String實現了IEnumerable<char>,因此可以使用LINQ擴展。因此,我使用SkipTake將字符串切片成500個字符的數組,並將其轉換爲字符串並添加到列表中。

+0

使用Linq來切割一個字符串類似於使用風鑽打開葡萄酒瓶。 – Tergiver 2011-02-25 16:22:02

0

嘿傢伙我有一個簡單的解決方案,就像「J. Vermeire」所說的那樣,我的字符串最終沒有500個字符,它可能少於300個,這就是爲什麼應用程序正在投擲錯誤..

因此應用此邏輯我做了一個簡單的循環,它可以檢查什麼的字符串的當前長度並相應地設置輸出....在這裏,我們去..

這裏我們假設字符串str包含34905個字符。

for(int i=0; i < str.Length; i += 500) 
{ 
    if (str.Length > i+500) 
    { 
     Response.Write(str.Substring(i, 500)); 
    } 
    else 
    { 
     Response.Write(str.Substring(i, str.Length-i)); 
    } 

} 

這已經完成了我的任務..感謝「J.Vermeire」爲您的邏輯,它的所有功勞...非常感謝。

相關問題