每个单词长于3个字母的首字母大写+第一行为大写-快速提问

问题描述 投票:0回答:2

我分配了大写的第一行,其余的每个3个字符以上的单词都以大写开头。

我正在控制台中对其进行测试,因此部分是通过streamreader / streamwriter制作的,但是当它正常运行时,我将对其进行纠正。

问题是Console.WriteLine();在for循环之前与它一起使用,它在第一行之后形成一个空行,但是如果没有它,则不会成为第三行。输入文本看起来像这样

title of text
sssssss ss ssss, ss sssssss
ddddd ddd ddddd dddddd

使用WriteLine,它最终像这样结束:

TITLE OF TEXT

sssssss ss ssss, ss sssssss
ddddd ddd ddddd dddddd

并且不带:

TITLE OF TEXT
Sssssss ss Ssss, ss Sssssss Ddddd Ddd Ddddd Dddddd

[我认为我把它弄得太复杂了,有点迷路了,所以我在寻找解决这个小问题的方法,或者也想使这段代码更容易,但这不是现在要说的。

using System;
using System.IO;

namespace priklad_8._4
{
    class Program
    {
        static void Main(string[] args)
        {
            firstUpper(@"aaa.txt", @"new.txt");

            Console.ReadLine();
        }
        static void firstUpper(String from, String to)
        {
            StreamReader sr = new StreamReader(from);
            StreamWriter sw = new StreamWriter(to);
            String s;
            int length = 0;
            char[] pole = new char[100];
            char dd = 'A';
            while ((s = sr.ReadLine()) != null)
            {
                if (length == 0)
                {
                    Console.WriteLine(s.ToUpper());
                    length++;
                }
                else
                {
                    String[] ss = s.Trim(' ').Split(' ');

                    Console.WriteLine();
                    for (int i = 0; i < ss.Length; i++)
                    {
                        if (ss[i].Length >= 3)
                        {
                            String ds = ss[i];
                            char[] das = ds.ToCharArray();

                            Console.Write(Char.ToUpper(das[0]) + ds.Substring(1) + " ");
                            if ((int)dd == 10)
                            {

                                Console.WriteLine();

                            }
                        }
                        else Console.Write(ss[i] + " ");
                    }
                }
            }
            sw.Close();
            sr.Close();
        }
    }
}

谢谢!

c# streamreader streamwriter uppercase
2个回答
3
投票

[如果您想保留其他所有内容,而不是

Console.WriteLine(s.ToUpper());

使用此:

Console.Write(s.ToUpper())

0
投票

也许是一种更干净的到达那里的方法:

using (var input = new StreamReader("input.txt"))
{
    var currentLine = 0;
    while (!input.EndOfStream)
    {
        var line = input.ReadLine() ?? "";
        if (++currentLine == 1)
        {
            // first line is upper case
            Console.WriteLine(line.ToUpper());
        }
        else
        {
            // Every word longer than 3 letter starts with capitalized
            Console.WriteLine(Regex.Replace(line, @"\w{3,}", 
                (match) => CultureInfo.CurrentCulture
                    .TextInfo.ToTitleCase(match.Value.ToLower())));
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.