[英]is there a splitByCharacterType method in c# like there is in Java?
在Java中,有一個splitByCharacterType方法,它接受一個字符串,例如0015j8*(
,然后將其拆分為"0015","j","8","*","("
。是否有這樣的內置函數?如果沒有,我將如何構建一個函數來做到這一點?
public static IEnumerable<string> SplitByCharacterType(string input)
{
if (String.IsNullOrEmpty(input))
throw new ArgumentNullException(nameof(input));
StringBuilder segment = new StringBuilder();
segment.Append(input[0]);
var current = Char.GetUnicodeCategory(input[0]);
for (int i = 1; i < input.Length; i++)
{
var next = Char.GetUnicodeCategory(input[i]);
if (next == current)
{
segment.Append(input[i]);
}
else
{
yield return segment.ToString();
segment.Clear();
segment.Append(input[i]);
current = next;
}
}
yield return segment.ToString();
}
用法如下:
string[] split = SplitByCharacterType("0015j8*(").ToArray();
結果是"0015","j","8","*","("
我建議您實現為擴展方法。
我認為這種方法不存在。 您可以按照以下步驟創建自己的實用程序方法:
用所有字符類型定義字符串,例如
string numberString = "0123456789"; string specialChars = "~!@#$%^&*(){}|\\/?"; string alphaChars = "abcde....XYZ";
您也許可以使用正則表達式類,如下所示,但是您需要添加對除數字和字母之外的其他字符的支持。
var chars = Regex.Matches("0015j8*(", @"((?:""[^""\\]*(?:\\.[^""\\]*)*"")|[a-z]|\d+)").Cast<Match>().Select(match => match.Value).ToArray();
結果0015,J,8
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.