无法相应地拆分字符串

时间:2013-07-18 12:06:32

标签: c# arrays string delimiter

我知道这个问题会被无数次问过,但我有点卡住了。 我有一个类似

的字符串
  

“文档1;文档2;文档3; 12”

它可能类似

  

“文档1;文档2;文档3;文档4; Doc5; 56”

它就像用分号分隔的几个字符串,后跟一个数字或id。

我需要分别提取数字/ id和字符串。 确切地说,我可以有2个字符串:一个有"Doc1;Doc2;Doc3""Doc1;Doc2;Doc3;Doc4",另一个只有数字/ id为“12”或“34”或“45”等。 是的我正在使用C#3.5

我理解这是一个非常容易和诙谐的问题,但是这个家伙被困住了。 需要专家协助。

此致 阿努拉格

7 个答案:

答案 0 :(得分:7)

string.LastIndexOfstring.Substring是您尝试做的事情的关键。

var str = "Doc1;Doc2;Doc3;12";
var ind = str.LastIndexOf(';');
var str1 = str.Substring(0, ind);
var str2 = str.Substring(ind+1);

答案 1 :(得分:4)

一种方式:

string[] tokens = str.Split(';');
var docs = tokens.Where(s => s.StartsWith("Doc", StringComparison.OrdinalIgnoreCase));
var numbers = tokens.Where(s => s.All(Char.IsDigit));

答案 2 :(得分:3)

String docs = s.Substring(0, s.LastIndexOf(';'));
String number = s.Substring(s.LastIndexOf(';') + 1);

答案 3 :(得分:2)

一种可能的方法是:

var ids = new List<string>();
var nums = new List<string>();

foreach (var s in input.Split(';'))
{
    int val;
    if (!int.TryParse(s, out val)) { ids.Add(s); }
    else { nums.Add(s); }
}

其中input类似于Doc1;Doc2;Doc3;Doc4;Doc5;56。现在,ids将包含所有Doc1个相似值,而nums将包含所有56个相似值。

答案 4 :(得分:2)

您可以尝试以下两种方法之一:(假设您的输入字符串位于string str;

方法1

  1. 获取LastIndexOf(';')
  2. 根据string拆分index。这将为您提供stringint部分。
  3. 拆分string部分并进行处理
  4. 处理int部分
  5. 方法2

    1. ;
    2. 上拆分字符串
    3. 运行for循环 - for (int i = 0; i < str.length - 2; i++) - 这是string部分
    4. 分别处理str [length - 1] - 这是int部分
    5.   

      请以此为出发点,因为可能有其他方法来实现此

      的解决方案

答案 5 :(得分:2)

您可以使用StringTokenizer功能。 http://www.c-sharpcorner.com/UploadFile/pseabury/JavaLikeStringTokenizer11232005015829AM/JavaLikeStringTokenizer.aspx

使用“;”拆分字符串     StringTokenizer st = new StringTokenizer(src1,“;”);

收集最终字符串。这将是你的身份证。

答案 6 :(得分:1)

string actual = "Doc1;Doc2;Doc3;12";
int lstindex = actual.LastIndexOf(';');
string strvalue = actual.Substring(0, lstindex);
string id = actual.Substring(lstindex + 1);