将字符串拆分为单个字符的字符串数组

75
我希望你能够将“this is a test”转换成类似的简单操作。
new string[] {"t","h","i","s"," ","i","s"," ","a"," ","t","e","s","t"}

我真的需要做像这样的事情吗?

test = "this is a test".Select(x => x.ToString()).ToArray();

编辑:为了澄清,我不想要一个字符数组,理想情况下我希望有一个字符串数组。除了我认为有一个更简单的方法之外,我并没有看到以上代码有什么问题。


你真的想把每个字符作为一个字符串吗? - Roman Starkov
8
你的代码var test = "this is a test".Select(x => x.ToString()).ToArray();有什么问题? - L.B
8个回答

159

我相信这就是您要找的内容:

char[] characters = "this is a test".ToCharArray();

4
虽然这不是我所要求的,但我开始意识到其实并没有理由让我提出这个要求。 - mowwwalker
1
@BrandonMoretz 我刚刚投了赞成票,这样你的声望就从一个非常漂亮的整数(5000)变化了。感谢你给出简明扼要的答案。 - AleX_
的确有将字符串拆分为多个字符的原因:C# char 无法表示每个 Unicode 码点。例如,“ ”由两个字符(代理对)表示。 - Fax
@Fax 那是绝对错误的。https://dev59.com/nnI95IYBdhLWcg3w1Bno - Brandon Moretz
1
@BrandonMoretz,你链接的答案并没有反驳我所说的内容?你用于将字符串拆分为字形的迭代器TextElementEnumerator之所以生成字符串而不是字符,正是因为这个原因(以及结合标记的缘故)。 - Fax
显示剩余4条评论

43

C#中的字符串已经有一个char索引器

string test = "this is a test";
Console.WriteLine(test[0]);

并且...

if(test[0] == 't')
  Console.WriteLine("The first letter is 't'");

这也可以运行...

Console.WriteLine("this is a test"[0]);

而这个...

foreach (char c in "this is a test")
  Console.WriteLine(c);

编辑:

我注意到问题已经更新,涉及到char[] 数组。如果你必须使用 string[] 数组,在C#中可以按每个字符分割字符串的方法如下:

string[] test = Regex.Split("this is a test", string.Empty);

foreach (string s in test)
{
  Console.WriteLine(s);
}

2
当我发布我的答案时,你指出了一个明显的点,我很感激。嗯,为什么我没想到呢? - David
1
他们有一个char索引器,并实现了IEnumerable<char>,但它们实际上不是char[]IList<char> - LukeH
1
返回翻译文本:true。它们是字符串类型,但重点是开发人员不需要使用ToCharArray()或任何类型的string[]转换来访问单个字符。 - Chris Gessler
@CSharper先生,我现在也走着同样的路。而且它对我起作用了。 - Amitya Narayan
1
有趣的是,Regex.Split 将字符串视为在第一个字符之前和最后一个字符之后有一个空字符串。 - Prokurors

8
简单!!
一行:
 var res = test.Select(x => new string(x, 1)).ToArray();

5
你可以使用 String.ToCharArray() 方法,然后在你的代码中将每个字符作为字符串处理。
以下是一个示例:
    foreach (char c in s.ToCharArray())
        Debug.Log("one character ... " +c);

5

试试这个:

var charArray = "this is a test".ToCharArray().Select(c=>c.ToString());

2
ToCharArray() 看起来是多余的。另外请注意,你得到的是 System.Linq.Enumerable+WhereSelectArrayIterator\2[System.Char,System.String]而不是System.String[]`。 - Wolf

3

最有可能你在寻找 ToCharArray() 方法。然而,如果需要 string[] ,则需要进行更多的工作,正如您在您的帖子中所提到的。

    string str = "this is a test.";
    char[] charArray = str.ToCharArray();
    string[] strArray = str.Select(x => x.ToString()).ToArray();

编辑:如果您担心转换的简洁性,我建议将其制作成扩展方法。
public static class StringExtensions
{
    public static string[] ToStringArray(this string s)
    {
        if (string.IsNullOrEmpty(s))
            return null;

        return s.Select(x => x.ToString()).ToArray();
    }
} 

1
将消息转换为字符数组,然后使用for循环将其转换为字符串。
string message = "This Is A Test";
string[] result = new string[message.Length];
char[] temp = new char[message.Length];

temp = message.ToCharArray();

for (int i = 0; i < message.Length - 1; i++)
{
     result[i] = Convert.ToString(temp[i]);
}

-3
string input = "this is a test";
string[] afterSplit = input.Split();

foreach (var word in afterSplit)
    Console.WriteLine(word);

结果:

this
is
a
test

如果您能稍微解释一下,那就更好了。谢谢! - Failed Scientist
2
这似乎不符合原问题中“由单个字符组成的字符串数组”的要求。 - Frank Boyne
1
这将其分成单词,而不是单个字符。 - Zoey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接