如何在C#中将单词的字母拆分为数组?

时间:2010-11-22 15:14:07

标签: c# .net string tokenize

如何将字符串拆分为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);
        }
    }
}
}

如何正确实施代码?

6 个答案:

答案 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。