【问题标题】:How can I slice a string in c#? [closed]如何在 C# 中对字符串进行切片? [关闭]
【发布时间】:2014-01-22 13:53:34
【问题描述】:
string word = "hello";

所以我想做的是对字符串进行切片,以便我可以在控制台窗口中打印,例如,elloh。在python中它是如此简单,但我不确定在c#中是否有特定的切片方法。

【问题讨论】:

  • In python it's so simple c#有什么难的?
  • 答案只需点击此页面一两次(msdn.microsoft.com/en-us/library/…)。学习使用文档,通常比询问要快。
  • 从表面上看,一切都那么简单,但事情可能会变得非常复杂(即使您“阅读文档”,其中 Microsoft 并不是给出答案的完美示例)。让我们举一个非常简单的例子,如果要识别字符串中的第一个字符是 unicode char 而第一个 char 可能是 Unicode 还是 ASCII 怎么办?我知道在这个特定问题中可能不是这种情况(应该有更好的问题)。我只是说“阅读文档”并不总是能做到这一点,即使事情看起来微不足道。
  • @ljgww 您提出的问题有一个简单的答案;):dotnet 中的所有字符代码点都在内部存储为 utf-16。只有当您将字符串呈现为字节时,编码才是相关的。
  • 感谢您指出这一事实(不知道)。为了澄清起见,让我们在这里声明一个更有用的事实:“在 C# 中,string 是 .NET 框架中 String 类的别名。”

标签: c# string slice


【解决方案1】:

切片的概念没有确切的翻译,但Substring 通常是您想要的。

我不清楚您将其分割的确切标准是什么,但这会满足您的要求:

void Main()
{
    var input = "hello";
    var output = input.Substring(1, input.Length - 1) + input.Substring(0, 1);

    Console.WriteLine (output);
}

【讨论】:

    【解决方案2】:

    一个字符串可以被索引来获取字符:

    string word = "hello";
    char h = word[0];
    

    或字符串有“切片”的方法:

    int start = 0;
    int length = 1;
    string h = word.Substring(start, length);
    

    为什么不read the docs 自己去了解一下?

    【讨论】:

    • 正确答案但未被接受为答案?
    • @trampster 除非您是问题作者 Ali Appleby,否则请不要留下似乎回复其他 cmets 的 cmets。现在这里看起来像问题“......但不被接受为答案?”有你的回复,我怀疑是这样的。
    • 现在已经不是 2014 年了,如果你像我一样用谷歌搜索如何分割字符串,因为你想使用 Span 和 Slice 是跨度使用的术语,那么你就会得到这个答案。 Joel 和 Jeff 在创建这个网站时非常清楚他们希望答案保持相关性。阿里可能不再关心这个问题,但成千上万的人从谷歌访问这个页面。
    • @trampster 为什么你回复 4 年前的答案就像在继续对话一样?他们今天,昨天甚至去年都没有为您发布答案。它是 4 年前为 Ali Appleby 发布的,当时是最新的。
    • @trampster 与无关并不意味着它无关紧要。
    【解决方案3】:

    你应该使用字符串的substring函数:

    word.Substring(1);
    

    http://msdn.microsoft.com/en-us/library/system.string.substring(v=vs.110).aspx

    【讨论】:

    • 不,这会分配内存,所以很慢。
    • @trampster 请不要仅仅因为之后出现了更好的东西而到处将整个互联网标记为过时。我同意 ReadOnlySpan<char> 现在在某些情况下会提供更好的选择,但如果您打算将每个告诉人们使用 Substring 的答案标记为“不够好”,我不想看到您找到 Cobol 文档。
    【解决方案4】:

    要“切片”一个字符串,您可以使用Substring 方法:

    string word = "hello";
    string ordw = word.Substring(1) + word.Substring(0, 1);
    

    但是,另一个答案是查看 NSlice,这是一个用于处理类似 python 的数组切片的库。

    这样做会更容易做到你所要求的吗?不会。它会更容易“切片”不同类型的集合吗?可能。

    【讨论】:

    • 不,我想要一个可以返回 ReadOnlySpan 的东西,我可以将它传递给 uint.Parse 而不必分配内存,这就是 substring 的作用。
    • 对不起,这个答案来自 2014 年,早于ReadOnlySpan<char> 可用。目前,这和它一样好。
    • @trampster 仅在 .NET Core 2.1 中实现了对 int.Parse(ReadOnlySpan<char>) 的支持。它不适用于 .NET Standard 或 .NET Framework。既然您已经知道ReadOnlySpan<char>,我不确定您为什么要抱怨Substring,因为您似乎已经知道可以使用什么。你有问题吗?
    【解决方案5】:

    也许你想要一个这样的扩展方法

    public static string Rotate(this string s, int numberOfChars)
    {
      if (string.IsNullOrEmpty(s))
        return s;
      numberOfChars %= s.Length;
      if (numberOfChars == 0)
        return s;
      if (numberOfChars < 0)
        numberOfChars += s.Length;
    
      return s.Substring(numberOfChars) + s.Remove(numberOfChars);
    }
    

    【讨论】:

      猜你喜欢
      • 2020-12-10
      • 2012-11-20
      • 2011-12-03
      • 2021-03-12
      • 2012-07-13
      • 1970-01-01
      • 2017-04-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多