将所有首字母设为大写,但最多 3 个字符的单词除外

Make all the first letters uppercase except for words with at max 3 characters

提问人:masha 提问时间:11/15/2023 最后编辑:Dmitry Bychenkomasha 更新时间:11/17/2023 访问量:91

问:

我有一个文本文件,用户可以使用许多字符串进行编辑,我希望所有首字母都大写,除了 <= 3 个字符的单词必须全部大写。

使用LINQPAD我像这样读取txt文件
var textFile = File.ReadAllText(@"C:\...\...\...\...\uppercase.txt");

文件示例
笔在桌子上
猫不在
桌子上 ChiLDreN 在蹦床上

想要的输出:
笔在桌子上
猫在桌子
下 孩子们在蹦床上

C# 文本 大写

评论

4赞 DarkBee 11/15/2023
你尝试了什么?你被困在哪里了?如何提问
0赞 eekinci 11/15/2023
if (word.Length <= 3) { return word.ToUpper(); } else { return char.ToUpper(word[0]) + word.Substring(1).ToLower(); }

答:

1赞 Tim Schmelter 11/15/2023 #1

您可以使用以下方法:

var newWords = textFile.Split(' ')
    .Select(w => w.Length <= 3 ? w.ToUpper() : char.ToUpper(w[0]) + w[1..].ToLower());
textFile = String.Join(" ", newWords);
1赞 Dmitry Bychenko 11/15/2023 #2

鉴于:text

string text = 
   @"THE PEN IS ON THE TABLE
     The cat is UNder ThE Table
     The ChiLDreN Are ON The trampoline";

我们可以使用正则表达式来做替换:

using System.Text.RegularExpressions;
using System.Globalization;

...

string result = Regex.Replace(text,
  @"\p{L}+",
    match => match.Value.Length > 3
      ? CultureInfo.CurrentCulture.TextInfo.ToTitleCase(match.Value)
      : match.Value.ToUpper());

在这里,我将其视为非空的字母序列。请注意,正则表达式与拆分尊重标点符号不同:word\p{L}+

"The cat! Not a dog" -> "THE CAT! NOT A DOG"

小提琴

1赞 Hr.Panahi 11/15/2023 #3

这是我是如何做到的:

string txt = "THE PEN IS ON THE TABLE\nThe cat is UNder ThE Table\nThe ChiLDreN Are ON The trampoline";
var lines = txt.Split('\n');

我先分手,然后:txt\n

foreach (var line in lines)
{
    var words = line.Split(' ');
    foreach (var word in words)
    {
        if (word.Length <= 3)
        {
            Console.Write(word.ToUpper() + " ");
        }
        else
        {
            Console.Write(word.Substring(0, 1).ToUpper() + word.Substring(1).ToLower() + " ");
        }
    }
    Console.WriteLine();
}

然后,我使用 foreach 循环遍历数组以获取其中的每个元素并用 .linesSplit(' ')

然后,我使用另一个 foreach 循环来遍历每个元素,以获取其中的每个单词并进行大写和打印。words

我是 C# 的新手,只是想提供帮助,因为我尝试了这种方法并且它奏效了。