簡體   English   中英

每個超過 3 個字母的單詞都以大寫開頭 + 第一行是大寫 - 快速問題

[英]Every word longer than 3 letter starts with capitalized + first line is Upper case - quick question

我得到了第一行大寫的任務,其余的每個 3 個或更多字符長的單詞都以大寫開頭。

我正在控制台中測試它,所以它部分是用流閱讀器/流編寫器制作的,但是當它運行良好時我會糾正它。

問題是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();
        }
    }
}

謝謝!

如果您想保持其他一切不變,只需

Console.WriteLine(s.ToUpper());

用這個:

Console.Write(s.ToUpper())

也許是一種更清潔的方式:

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

使用 File.ReadAllLines 和 File.WriteAllLines 到達那里的另一種更清潔的方法

static void Main(string[] args)
{
    var lines = File.ReadAllLines("text.txt");
    var newLines = new string[lines.Count()];

    for (var i = 0; i < lines.Count(); i++)
    {
        if (i == 0)
        {
            newLines[i] = lines[i].ToUpper();
        }
        else
        {
            foreach (var word in lines[i].Split(' '))
            {
                newLines[i] += string.Format("{0} ", word.Length >= 3 ? CultureInfo.CurrentCulture.TextInfo.ToTitleCase(word) : word);
            }
        }
    }

    File.WriteAllLines("newText.txt", newLines);
}

我的意思是,如果你因為我很無聊而想要一個看起來很不干凈的襯里……你可以這樣做。

static void Run(string fromFile, string toFile)
{
    File.WriteAllLines(toFile, File.ReadAllLines(fromFile).Select((line, index) => index == 0 ? line.ToUpper() : Regex.Replace(line, @"\w{3,}", (match) => CultureInfo.CurrentCulture.TextInfo.ToTitleCase(match.Value))));
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM