5

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

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

它可能是这样的

"Doc1;Doc2;Doc3;Doc4;Doc5;56"

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

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

我理解这是一个非常简单而机智的问题,但是这个人被卡住了。需要专家协助。

问候阿努拉格

4

7 回答 7

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);
于 2013-07-18T12:09:20.673 回答
4

单程:

string[] tokens = str.Split(';');
var docs = tokens.Where(s => s.StartsWith("Doc", StringComparison.OrdinalIgnoreCase));
var numbers = tokens.Where(s => s.All(Char.IsDigit));
于 2013-07-18T12:11:23.767 回答
3
String docs = s.Substring(0, s.LastIndexOf(';'));
String number = s.Substring(s.LastIndexOf(';') + 1);
于 2013-07-18T12:18:19.767 回答
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类似的值。

于 2013-07-18T12:09:52.333 回答
2

您可以尝试以下两个选项之一:(假设您的输入字符串在string str;

方法一

  1. 得到LastIndexOf(';')
  2. 拆分string基于index. 这会给你stringint部分。
  3. 拆分string零件并处理它
  4. 加工int零件

方法二

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

请以此为起点,因为可能有其他方法可以为此实施解决方案

于 2013-07-18T12:17:21.717 回答
2

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

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

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

于 2013-07-18T12:19:05.223 回答
1
string actual = "Doc1;Doc2;Doc3;12";
int lstindex = actual.LastIndexOf(';');
string strvalue = actual.Substring(0, lstindex);
string id = actual.Substring(lstindex + 1);
于 2013-07-18T12:15:27.857 回答