【发布时间】:2014-06-04 04:21:21
【问题描述】:
我试图弄清楚如何查看字符串,找到第一个字母字符,然后从该索引点删除,然后继续。
例如,
string test = "5604495Alpha";
我需要遍历这个字符串,找到"A" 并从该点删除。
【问题讨论】:
我试图弄清楚如何查看字符串,找到第一个字母字符,然后从该索引点删除,然后继续。
例如,
string test = "5604495Alpha";
我需要遍历这个字符串,找到"A" 并从该点删除。
【问题讨论】:
有几种方法可以做到这一点。两个例子:
string s = "12345Alpha";
s = new string(s.TakeWhile(Char.IsDigit).ToArray());
或者,更准确地说,正如 Baldrick 在他的评论中指出的那样,找到第一个字母:
s = new string(s.TakeWhile(c => !Char.IsLetter(c)).ToArray());
或者,你可以写一个循环:
int pos = 0;
while (!Char.IsLetter(s[pos]))
{
++pos;
}
s = s.Substring(0, pos);
【讨论】:
TakeWhile.. 我喜欢它。我试图想出一种 LINQ 方法来做到这一点,但什么都没想到(今天 F# 太多了:/)。 +1
s = new string(s.TakeWhile(c => !Char.IsLetter(c)).ToArray()); 它应该是第一个字母,而不是第一个非数字。跨度>
IsDigit 或IsNumber(这两者之间存在差异——查一下)会给你第一个非数字。如果字符串包含空格或特殊字符(即123^$87Alpha),则使用IsNumber 或IsDigit 将只返回字符串123。 OP 最多需要第一个字母:123^$87。
一个小方法:
int getIndexOfFirstLetter(string input) {
var index = 0;
foreach (var c in input)
if (char.IsLetter(c))
return index;
else
index++;
return input.Length;
}
用法:
var test = "5604495Alpha";
var result = test.Substring(0, getIndexOfFirstLetter(test));
// Returns 5604495
【讨论】:
Splits 功能短路。它也不依赖于字符A 作为拆分所需的东西。它将删除 任何 字符。
你应该打破它以确保有一个 匹配,并确保在索引 0 处有一个 值...但它确实适用于此用于演示目的的示例案例。
string test = "5604495Alpha";
var test2 = test.Remove(test.IndexOf(
System.Text.RegularExpressions.Regex.Match(test, "[A-Za-z]").Index));
// test2 = "5604495"
【讨论】:
Match m = Regex.Match(test, "[A-Za-z]").Index。虽然你必须在这里小心。如果没有字母字符,Index 属性可能不会包含您想要的值。
IndexOf:var test2 = Regex.Match(test, "[A-Za-z]").Index);