我知道这个问题会被无数次问过,但我有点卡住了。 我有一个类似
的字符串“文档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
我理解这是一个非常容易和诙谐的问题,但是这个家伙被困住了。 需要专家协助。
此致 阿努拉格
答案 0 :(得分:7)
string.LastIndexOf和string.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
LastIndexOf(';')
string
拆分index
。这将为您提供string
和int
部分。string
部分并进行处理int
部分方法2
;
for
循环 - for (int i = 0; i < str.length - 2; i++)
- 这是string
部分int
部分请以此为出发点,因为可能有其他方法来实现此
的解决方案
答案 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);