2012-02-09 115 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();