每个超过 3 个字母的单词都以大写开头 + 第一行是大写 - 快速提问
Every word longer than 3 letter starts with capitalized + first line is Upper case - quick question
我得到的任务是第一行大写,其余的每个 3 个或更多字符长的单词都以大写开头。
我正在控制台中对其进行测试,所以它的一部分是用 streamreader/streamwriter 制作的,但是当它运行良好时,我会更正它。
问题是 for 循环之前的 Console.WriteLine(); 会在第一行之后生成一个空行,但如果没有它,它不会生成第三行。输入文本看起来像这样
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))));
}
我得到的任务是第一行大写,其余的每个 3 个或更多字符长的单词都以大写开头。
我正在控制台中对其进行测试,所以它的一部分是用 streamreader/streamwriter 制作的,但是当它运行良好时,我会更正它。
问题是 for 循环之前的 Console.WriteLine(); 会在第一行之后生成一个空行,但如果没有它,它不会生成第三行。输入文本看起来像这样
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))));
}