使用Console.Write进行字符串格式化

时间:2011-05-22 15:00:27

标签: c# arrays client-server string-formatting

我正在研究我的示例代码,其中我想显示从服务器到客户端屏幕的数字数组。

基本上,我首先让服务器创建一个由99个随机生成的数字组成的数组,其值为1 - 100,将数组转换为字符串,然后使用字节发送将字符串传输到服务器。

代码如下:

//SERVER
int[] result = GenerateNumbers();
string resultingString = "";
for (int i = 0; i < result.Length; i++)
     resultingString = resultingString + result[i] + ",";
s.Send(asen.GetBytes(resultingString));

//CLIENT
byte[] bb = new byte[1000];
int k = stm.Read(bb, 0, 1000);

for (int i = 0; i < k; i++)
{
     Console.Write(Convert.ToChar(bb[i]));
}

现在我要做的是在客户端屏幕中显示生成的数组。我的代码目前可以做到这一点。但是,使用Console.Write()命令,它会一直显示字符串,直到它结束。如下例所示:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 ... 93 94 95 96 97 98 99

我现在要做的是使显示格式如下:

 1  2  3  4  5  6  7  8  9 10
11 12 13 14 15 16 17 18 19 20
21 22 23  . . . . . . . . . . 
90 91 92 93 94 95 96 97 98 99

有人可以指点我这么做的好方法吗? :)

3 个答案:

答案 0 :(得分:4)

String.PadLeft就是您所追求的 - 这将使用您选择的填充字符填充给定字符串的左侧以使其长n个字符。

打破你需要的每个第n个号码(在你的Console.Write(...)之后;):

if((i % n) == 0) {
  Console.WriteLine();
}

答案 1 :(得分:1)

我认为您的客户存在问题。你发送一个逗号分隔的字符串,我没有看到你处理它。 我假设使用了UTF8。 我希望这会有所帮助:

//CLIENT
//Makes an array to hold stream content
var bb = new byte[stm.Length];
//Fill the array with the stream content
stm.Read(bb, 0, (int)stm.Length);
//Converts the array of bytes back to a string
var rcvString = System.Text.UTF8Encoding.UTF8.GetString(bb);
//Split the string into an array using "," as separator
var array = rcvString.Split(new string[]{","}, 
    StringSplitOptions.RemoveEmptyEntries);
var pad = 2;   
var inc = 20;
var max = array.Length;
//Iterates through the array in "inc" intervals                        
for (var i = 0; i < max; i+=inc)
{
    //Iterates through a section of the array determined by "i" and "inc" 
    //(there is a special case if "inc" it's not a multiple of max)
    for (var j = 0; j < (max - i > inc ? inc : max - i); j += 1)
    {
        Console.Write(String.Format(@" {0}",array[i + j].PadLeft(pad)));
    }
    Console.WriteLine();
}

答案 2 :(得分:0)

使用Console.WriteLine Method打破适当值的新行..