如何将字符串拆分为C#中的字符数组?
示例使用的字符串词是“robot”。
程序应打印出来:
r
o
b
o
t
原始代码段:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using System.IO;
using System.Text.RegularExpressions;
namespace Testing
{
class Program
{
static void Main(string[] args)
{
String word = "robot";
String[] token = word.Split(); // Something should be placed into the () to
//print letter by letter??
foreach (String r in token)
{
Console.WriteLine(r);
}
}
}
}
如何正确实施代码?
答案 0 :(得分:13)
为什么不呢?
public void WriteLetters(string s)
{
foreach (char c in s)
{
Console.WriteLine(c);
}
}
如果您真的想在显式字符数组中看到它,请执行以下操作:
string s = "robot";
char[] charArray = s.ToCharArray();
如果您想要打印出来(每行1个),请执行以下操作:
for (int i = 0; i < charArray.Length; i++)
{
Console.WriteLine(charArray[i]);
}
我不确定你要做什么,所以我可能会离开基地。
如果通过tokenize,您的意思是将字符存储在数组中,那么您已经在String对象中 1 。
1 实际上并非如此,因为String使用索引器来迭代字符值,而在C / C ++中,字符串实际上是一个数组字符。出于我们的目的,我们可以将字符串视为字符数组
答案 1 :(得分:10)
类String
实现IEnumerable<char>
,因此要运行字符串的字母,您只需抓取IEnumerator<char>
并处理{{1}一次一个。一种方法是使用foreach
:
char
如果您需要数组中的每个foreach(char c in "robot") {
Console.WriteLine(c);
}
,则可以使用String.ToCharArray
:
char
答案 2 :(得分:1)
你的意思是这样吗?
foreach(var alpha in myString.Where(c => Char.IsLetter(c)))
{
Console.WriteLine(alpha);
}
答案 3 :(得分:1)
你试图做太多。
试试这个:
String word = "robot";
foreach (char letter in word)
{
Console.WriteLine(letter);
}
修改强>
要将字符串拆分为字符数组而不使用循环,可以执行以下操作:word.ToCharArray()
答案 4 :(得分:1)
您可以使用ToArray()方法返回char数组。
string word = "robot";
char[] array = word.ToArray();
答案 5 :(得分:1)
似乎每个人都希望将String转换为Chars数组。
怎么样
for(int i = 0; i < tmpString.Length; i++)
Console.WriteLine(tmpString[i]);
现在你拥有了char数组的速度而没有额外的复制记忆。
编辑:字符串是内部的字符数组,由于字符串是不可变的,因此无法更改其值。但是你可以从那个char数组中读取。 String =只读字符数组。
我想不出有什么理由将String转换为Char [],除非你想“编辑”字符串。
long lTicks;
char[] tmpChar = { 'a', 'b', 'c', 'd', 'e' };
String tmpString = "abcde";
char chRead;
lTicks = DateTime.Now.Ticks;
for (int i = 0; i < 100000000; i++)
chRead = tmpChar[i%5];
Console.WriteLine(((DateTime.Now.Ticks - lTicks) / 10000).ToString());
lTicks = DateTime.Now.Ticks;
for (int i = 0; i < 100000000; i++)
chRead = tmpChar[i % 5];
Console.WriteLine(((DateTime.Now.Ticks - lTicks) / 10000).ToString());
lTicks = DateTime.Now.Ticks;
for (int i = 0; i < 100000000; i++)
chRead = tmpString[i%5];
Console.WriteLine(((DateTime.Now.Ticks - lTicks) / 10000).ToString());
lTicks = DateTime.Now.Ticks;
for (int i = 0; i < 100000000; i++)
chRead = tmpString[i % 5];
Console.WriteLine(((DateTime.Now.Ticks - lTicks) / 10000).ToString());
Console.ReadLine();
有点好笑,String实际上比Char []更快。我每次运行两次,以确保没有影响结果的加载时间问题。编译为发布并进行优化。对于我来说Char []是~1950ms和String~1850ms。