【问题标题】:Cut a longer word/string in smaller chunks for fitting a field将较长的单词/字符串切成较小的块以适合字段
【发布时间】:2017-06-07 11:32:50
【问题描述】:

我想用一个包含许多单词的字符串填充一个字段。当我有很大的单词时,我需要一个来拆分单词。如果我的单词超过 10 个字母,我需要在该单词的第 5 位留一个空格。

如何获得新的“myString”字更短?

    static void Main(string[] args)
    {
        var myString = "This is my string with some loooooooooooooong words. Please devide meeeeeeeeeeeeeeeeeeeeeeeee";
        var myStringSplit = myString.Split();
        var query = myStringSplit.Where(x => x.Length > 10).ToList();
        foreach (var item in query)
        {
            item.Insert(5, " ");
        }
    }

编辑:我的预期结果:myString = "This is my strin g with some loooo ooooo ooooo ng words. Pleas e devid e meeee eeeee eeeee eeeee eeeee e";

【问题讨论】:

  • 那么你的问题是什么?
  • 我改了问题
  • 您正在向我们展示您的代码...它不起作用怎么办?你为什么向我们展示你的代码?
  • 还不清楚你想做什么...比如给定的字符串,你想要什么结果?
  • @kame 请添加您期望得到的结果。从您的问题中不清楚您的问题是什么。

标签: c# string word-wrap


【解决方案1】:

以下是如何获得结果的示例:

public static void Main(string[] args)
{
    var myString = "This is my string with some loooooooooooooong words. Please devide meeeeeeeeeeeeeeeeeeeeeeeee";
    string[] myStringSplit = myString.Split();
    for (int i =0;i<myStringSplit.Length;i++)
    {
        if(myStringSplit[i].Length>5)
            myStringSplit[i] = Regex.Replace(myStringSplit[i], ".{5}(?=.)", "$0 ");
    }
    var resultString = myStringSplit.Aggregate((x,y)=> x+" "+y);
    Console.WriteLine(resultString);
}

输出如下:

这是我的字符串,带有一些 loooo ooooo ooooo ng 单词。请 devid e meeee eeeee eeeee eeeee eeeee e

【讨论】:

  • Regex 应该是 Regex.Replace(myStringSplit[i], ".{5}(?=.)", "$0 ");".{5}(?!$)"(使用 10 个字符的字符串进行测试,您的正则表达式是 12345 67890 ,末尾有一个额外的空格。而不是 @ 987654326@你可以使用string.Joinstring.Join(" ", myStringSplit)
【解决方案2】:
static void Main(string[] args)
{
    var myString = "This is my string with some loooooooooooooong words. Please devide meeeeeeeeeeeeeeeeeeeeeeeee";
    var newString = string.Empty;
    var myStringSplit = myString.Split();
    var query = myStringSplit.Where(x => x.Length > 10).ToList();
    foreach (var item in myStringSplit)
    {
        if(item.Length > 10)
        {
            var itemToSplit = item;
            itemToSplit.Insert(5, " ");
            newString += itemToSplit;
        }
        else
        {
           newString += item;
        }
    }
}

应该是这样的。您的尝试不起作用的原因是您不允许在 foreach 循环中编辑项目。 More info on the foreach loop

【讨论】:

    【解决方案3】:

    试试这个可能会有帮助

    static void Main(string[] args)
            {
                var myString = "This is my string with some loooooooooooooong words. Please devide meeeeeeeeeeeeeeeeeeeeeeeee";
                var myStringSplit = myString.Split();
                var query = myStringSplit.Where(x => x.Length > 10).ToList();
                foreach (var item in query)
                {
                    string outString = Regex.Replace(item, ".{5}", "$0 ");
                }
            }
    

    这将在每五个单词之后分隔字符串..

    已编辑

    【讨论】:

    • 但我只想分割大小超过 10 个字符的单词。
    • 根据您的要求编辑
    • 我只想拆分超过 10 个字符的单词。因此,我必须先把长词拿来。
    • 变量查询将保存超过 10 个字符的值。然后我们循环相同并在 5 个字符后添加空格。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-09
    • 2016-06-10
    • 1970-01-01
    • 2015-02-07
    • 2020-05-11
    相关资源
    最近更新 更多