【问题标题】:How do I split a word's letters into an Array in C#?如何在 C# 中将单词的字母拆分为数组?
【发布时间】:2011-05-13 21:49:33
【问题描述】:

如何在 C# 中将字符串拆分为字符数组?

使用的示例字符串单词是“robot”。

程序应该打印出来:

r
o
b
o
t

原码sn-p:

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);
        }
    }
}
}

如何正确实现代码?

【问题讨论】:

  • 您在大多数人会写“字母”的地方使用“字母”这个词可能非常令人困惑。
  • 我认为如果您将alphabet 替换为letter,您的问题会更有意义。是你想要的词吗?
  • “按字母顺序打印”是什么意思?
  • “tokenize”是什么意思?您已被问过多次,但尚未提供任何反馈。在你这样做之前,你很可能会一直得到相同的解决方案。帮助我们帮助您!
  • @rmx 是的,它的字母/字母。

标签: c# .net string tokenize


【解决方案1】:

为什么不这样?

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]);
}

我不太确定你想做什么,所以我可能离题了。

如果通过标记化,你的意思是将字符存储在一个数组中,你已经在一个字符串对象中拥有它1

1 实际上并非如此,因为 String 使用索引器来遍历字符值,而在 C/C++ 中,字符串实际上是一个数组人物。出于我们的目的,我们可以将字符串视为字符数组

【讨论】:

    【解决方案2】:

    String 类实现了IEnumerable&lt;char&gt;,因此要遍历字符串的字母,您只需获取一个IEnumerator&lt;char&gt; 并一次处理一个char。一种方法是使用foreach:

    foreach(char c in "robot") {
        Console.WriteLine(c);
    }
    

    如果您需要数组中的每个char,您可以使用String.ToCharArray

    char[] letters = "robot".ToCharArray();
    

    【讨论】:

    • 有什么方法可以标记这个词?
    • @JavaNoob:这对你意味着什么?
    • @Jason 如果可能的话,我不想使用循环来分隔单词。我需要一个数组中的每个字母。
    • @JavaNoob 好的,首先,它是字母/字符。不是字母。这实际上没有任何意义,而且令人困惑,因此请使用正确的词。其次,您必须使用循环。 Split() 函数是使用循环实现的,因此无论您是否知道,您的代码中都会出现循环。如果你真的想要,你可以将循环移动到一个单独的函数中并让它构建并返回一个char[],这样你就不必在你的 Main 中看到它,但这就是你所能做的。做。
    • @spartan:您可以使用word.ToCharArray() - 请参阅下面的答案。
    【解决方案3】:

    你的意思是这样的吗?

    foreach(var alpha in myString.Where(c => Char.IsLetter(c)))
    {
        Console.WriteLine(alpha);
    }
    

    【讨论】:

    • 有什么方法可以标记这个词?
    【解决方案4】:

    您可以使用 ToArray() 方法返回 char 数组。

    string word = "robot";
    char[] array = word.ToArray();
    

    【讨论】:

    • 请注意ToArrayString 的扩展方法,您需要将using System.Linq; 添加到您的文件中。
    • 但你为什么要这么做? string 实现 IEnumerable&lt;char&gt; 并且对于大多数意图和目的而言,它可以像 char 数组一样工作(尤其是使用 LINQ)。
    【解决方案5】:

    你做的太多了。

    试试这个:

            String word = "robot";
    
            foreach (char letter in word)
            {
                Console.WriteLine(letter);
            }
    

    编辑:

    要将字符串拆分为字符数组,无需循环,您可以这样做:word.ToCharArray()

    【讨论】:

      【解决方案6】:

      似乎每个人都想将字符串转换为字符数组。

      怎么样

      for(int i = 0; i < tmpString.Length; i++)
      Console.WriteLine(tmpString[i]);
      

      现在您拥有 char 数组的速度,而无需额外的复制内存。

      edit:String 是一个内部字符数组,只是没有办法更改它们的值,因为 String 是不可变的。但是您可以从该 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[] 约为 1950 毫秒,字符串约为 1850 毫秒。

      【讨论】:

      • 每个人都在这样做,因为这就是他想要的。如果我们只是将字符写到控制台,我在下面的回答中解决了这个问题。
      • 那么string 是一个对象还是一个字符数组?
      • 他想把一个字符串拆分成一个字符数组,关键部分这样他就可以输出单个字符了。听起来他不知道您可以将字符串视为字符数组,我认为他的问题是阅读理解他不知道他的选择。
      • 字符串是一个存储字符数组的对象,但确实提供了任何方法来修改这些字符的内容。您可以读取,但不能更新为 char[]。您可以轻松创建自己的字符串类,而我必须使用 C/C++ 来实现。
      猜你喜欢
      • 1970-01-01
      • 2022-08-22
      • 1970-01-01
      • 1970-01-01
      • 2016-07-22
      • 2010-12-04
      • 2013-02-23
      • 1970-01-01
      • 2019-01-01
      相关资源
      最近更新 更多