2012-02-09 135 views
17

PHP開發人員在這裏使用C#。 我正在使用一種技術,通過將字符串分解爲一個數組,然後將第一個元素移出數組並將第一個元素保留回字符串中,從大字符串中刪除一段文本。從陣列中刪除第一個元素

隨着PHP(一個真棒&易語言),它只是

$array = explode('somestring',$string); 
array_shift($array); 
$newstring = implode(' ', $array); 

和我做。

我對c#感到非常生氣,不允許我創建動態數組,並且不提供默認的函數,可以執行與PHP相關的數組。我不得不創建列表和預定義關鍵結構等,但我是新的,我敢肯定,仍然有同樣優雅的方式來執行相同的C#。

有人會告訴我一個乾淨的方式來實現這個目標與C#?

問題的改寫:如何使用c#代碼從數組中刪除第一個元素。

這是多遠我已經收到,但RemoveAt移除拋出一個錯誤,而調試,所以我不相信它的工作原理:

//scoop-out feed header information 
if (entry_start != "") 
{ 
    string[] parts = Regex.Split(this_string, @entry_start); 
    parts.RemoveAt(0); 
    this_string = String.Join(" ", parts); 
} 
+0

問題是如何創建一個數組,該數組在分割字符串後沒有指定長度? – 2012-02-09 22:37:06

+1

P.S. C#是一種編程語言。 PHP是一種腳本語言。針對不同目的的不同設計。 – 2012-02-09 22:47:41

+1

@atwellpub'RemoveAt'方法用於泛型集合,而不是數組。 Intellisense甚至不應該爲零件數組提供'RemoveAt'。 – JYelton 2012-02-09 22:51:19

回答

37

我會在C#如此的瘋狂不是讓我來創建動態數組

您可以查看List<T>類。它的RemoveAt可能值得檢查。

但對於您的特定情況下,你可以簡單地使用LINQ和Skip擴展方法(不要忘記添加using System.Linq;到您的文件,以使其範圍):

if (entry_start != "") 
{ 
    string[] parts = Regex.Split(this_string, @entry_start).Skip(1).ToArray(); 
    this_string = String.Join(" ", parts); 
} 
+0

感謝大家的幫助,甚至是熱度。我很感激。謝謝Darin!乾杯! – atwellpub 2012-02-09 22:55:55

4

您可以使用LINQ對於此:

if (entry_start != "") 
    this_string = String.Join(" ", Regex.Split(this_string, @entry_start).Skip(1).ToArray()); 
11

C#的設計不是快速和骯髒,也沒有特別專門處理文本。此外,用於從一開始刪除字符串的一部分的技術是瘋狂的imho。

爲什麼不使用String.Substring(int start, int length)加上String.IndexOf("your delimiter")

+0

+1,那會很快。 – 2012-02-09 22:56:42

+1

@ssg,可能太快:) – 2012-02-09 23:24:00

0

你可能比數組更適合泛型列表,它更像PHP數組。

List<T>

但如果你的目標是「從一個大的字符串中刪除文本塊」,那麼更簡單的方法是:

string Example = "somestring"; 
string BlockRemoved = Example.Substring(1); 
// BlockRemoved = "omestring" 

編輯

我誤解了問題,認爲你只是從數組中包含組成字符串的字符組成的第一個元素。請使用String.Split方法代替分隔符。 Some good examples are given here

2
string split = ","; 
string str = "asd1,asd2,asd3,asd4,asd5"; 
string[] ary = str.Split(new string[] { split }, StringSplitOptions.RemoveEmptyEntries); 
string newstr = string.Join(split, ary, 1, ary.Count() - 1); 

拆分爲「,」。刪除第一條記錄。再結合回來了 「」

7

下面是相應的C#代碼:

string input = "a,b,c,d,e"; 
string[] splitvals = input.Split(','); 
string output = String.Join(",", splitvals, 1, splitvals.Length-1); 
MessageBox.Show(output); 
+0

+1,很好地工作... – Bor691 2013-06-18 18:27:58

2

如上所述,您可以使用LINQ。 Skip(int)將返回IEnumerable<string>,然後您可以將其轉換爲數組。

string[] myArray = new string[]{"this", "is", "an", "array"}; 
myArray = myArray.Skip(1).toArray();