问题
What I want to do, is make the text that I output via the Console.Writeline method line up perfectly regardless of length.
Example:
// Notice that no matter the length of the text on the left,
// the text on the right is always spaced at least 5 spaces.
this is output text
this is also output text
output text
my output text
Am I going to have to write my own method for this, or does .Net contain something that I can use already?
回答1:
Something like this should work for you. Hopefully you can adapt it to your needs.
string[] outputs = {
"this is output",
"this is also output",
"output",
"my output"
};
// order outputs in descending order by length
var orderedOutputs = outputs.OrderByDescending(s => s.Length);
// get longest output and add 5 chars
var padWidth = orderedOutputs.First().Length + 5;
foreach (string str in outputs)
{
// this will pad the right side of the string with whitespace when needed
string paddedString = str.PadRight(padWidth);
Console.WriteLine("{0}{1}", paddedString, "text");
}
回答2:
You can also take a look at this page that explains .NET string formatting. Instead of a manual PadLeft
and PadRight
you can declare the padding size directly in your formatting string. Something along the lines of
var offset = outputs.Max( s => s.Length );
var formatString = "{0,-" + offset + "} {1}";
foreach( var dataPoint in /*[your collection of data points]*/ )
{
Console.WriteLine( formatString, /*[first value]*/, /*[second value]*/ );
}
回答3:
Think in Linq instead!
var outputs = new List<string>() {
"this is output",
"this is also output",
"output",
"my output"
};
var size = outputs.Max (str => str.Length) + 5;
Console.WriteLine (
string.Join(Environment.NewLine,
outputs.Select (str => str.PadRight( size ) + "Text" ) )
);
/*
this is output Text
this is also output Text
output Text
my output Text
*/
回答4:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string[] lines = File.ReadAllLines("E:\\Exp2Act1.txt");
int what1 = (Console.WindowWidth / 2) - 18;
int here1 = (Console.WindowHeight / 3);
Console.SetCursorPosition(what1, here1);
Console.WriteLine(lines[0]);
int what2 = (Console.WindowWidth / 2) - 18;
int here2 = (Console.WindowHeight / 3) + 1;
Console.SetCursorPosition(what2, here2);
Console.WriteLine(lines[1]);
int what3 = (Console.WindowWidth / 2) - 18;
int here3 = (Console.WindowHeight / 3) + 2;
Console.SetCursorPosition(what3, here3);
Console.WriteLine(lines[2]);
int what4 = (Console.WindowWidth / 2) - 18;
int here4 = (Console.WindowHeight / 3) + 3;
Console.SetCursorPosition(what4, here4);
Console.WriteLine(lines[3]);
int what5 = (Console.WindowWidth / 2) - 18;
int here5 = (Console.WindowHeight / 3) + 4;
Console.SetCursorPosition(what5, here5);
Console.WriteLine(lines[4]);
int what6 = (Console.WindowWidth / 2) - 18;
int here6 = (Console.WindowHeight / 3) + 5;
Console.SetCursorPosition(what6, here6);
Console.WriteLine(lines[5]);
Console.Read();
}
}
}
来源:https://stackoverflow.com/questions/10303319/aligning-text-output-by-the-console