StringBuilder, добавьте Tab между значениями

У меня есть небольшая проблема:

У меня есть список полей с 3 значениями. Я хочу построить свою строку с этими тремя значениями, разделенными "TAB"..

Код:

StringBuilder stringBuilder = new StringBuilder();
foreach (string field in fields)
{
    stringBuilder.Append(field).Append("\t");
}
stringBuilder.AppendLine();
return stringBuilder.ToString();

Вкладка находится только между 3-м и 2-м значением (между 1-м и 2-м пробел?!)

Итак, я попробовал это:

StringBuilder stringBuilder = new StringBuilder();
foreach (string field in fields)
{
    stringBuilder.Append(field + "\t").Append("\t");
}
stringBuilder.AppendLine();
return stringBuilder.ToString();

Затем у меня есть 2 вкладки между 3-й и 2-й, одна вкладка между 1-й и 2-й, а также пробел между 1-й и 2-й.

(Космос всегда рядом, как этого избежать?)

Так что мне делать? Нужна только (без пробелов..) табуляция между этими значениями..


person eMi    schedule 08.02.2012    source источник
comment
Как убедиться, что вкладки нет? Глядя на то, где на экране заканчивается текст?   -  person GSerg    schedule 08.02.2012
comment
По крайней мере, я беру строку (возврат) и копирую ее в буфер обмена с помощью кода, а затем вставляю в блокнот.   -  person eMi    schedule 08.02.2012
comment
Знаете ли вы, что блокнот устанавливает позиции табуляции в фиксированных точках, и если ваша табуляция заканчивается близко к этой точке, она будет казаться узкой, как пробел?   -  person GSerg    schedule 08.02.2012
comment
только что увидел это сейчас .. Попробовал тогда в Word, и там это работает .. Ну, проблема решена ;D   -  person eMi    schedule 08.02.2012
comment
вероятно, можно было бы посмотреть в notepad++/vim или что-то в двоичном редакторе, чтобы посмотреть, что у вас есть на самом деле   -  person ColWhi    schedule 08.02.2012
comment
надо скачать сначала хехе   -  person eMi    schedule 08.02.2012
comment
хм, блокнот++ показывает то же самое, что и блокнот, фальшивые вещи, но Word показывает это хорошо...   -  person eMi    schedule 08.02.2012


Ответы (5)


пытаться

StringBuilder stringBuilder = new StringBuilder();
foreach (string field in fields)
{
    stringBuilder.Append(field.Trim()).Append("\t");
}
stringBuilder.AppendLine();
return stringBuilder.ToString();

В основном я бы просто использовал return string.Join ( "\t", fields ); .

person Yahia    schedule 08.02.2012
comment
только что решил проблему, посмотрите комментарий к вопросу, но идея с обрезкой хороша, я отмечу это как ответ :) - person eMi; 08.02.2012
comment
Является ли эта платформа независимой? например, Environment.Newline не зависит от платформы, а \n — нет. - person Steam; 27.12.2013
comment
@blasto AFAIK для Tab есть только один символ - так что ИМХО это не зависит от платформы ... - person Yahia; 27.12.2013

Я думаю, вы путаете с символом табуляции и sapces.

Ожидаете ли вы, что в конце каждого слова будет добавлено фиксированное количество пробелов?

\t -> это просто символ табуляции

Следующее генерируется кодом, предоставленным вами.

Java    StackOverflow   Banyan
Javasun StackOverflow   Banyan

Вышеупомянутые две строки имеют одинаковые символы табуляции ч / б 1-го и 2-го слова.

если вы наберете еще один символ в конце «Javasun», он будет расширяться, как показано ниже.

Javaasunk   StackOverflow   Banyan
person Prakash P    schedule 08.02.2012

Я думал, ты захочешь

StringBuilder stringBuilder = new StringBuilder();
foreach (string field in fields)
{
    stringBuilder.Append(field);
    stringBuilder.Append("\t");
}
stringBuilder.AppendLine();
return stringBuilder.ToString();
person ColWhi    schedule 08.02.2012
comment
хотя, глядя на MSDN, Append все равно возвращает ссылку на построитель строк, поэтому это не должно иметь значения. - person ColWhi; 08.02.2012
comment
это то же самое .. но просто решило проблему, посмотрите комментарий к вопросу - person eMi; 08.02.2012
comment
да, я тоже добавил комментарий там - person ColWhi; 08.02.2012

Вместо зацикливания можно использовать string.Join:

StringBuilder stringBuilder = new StringBuilder();

stringBuilder.AppendLine(string.Join("\t", fields));

Обратите внимание, что вы также можете передать строку непосредственно в AppendLine.

person Oded    schedule 08.02.2012

person    schedule
comment
назовите это как WarningWindow (напишите что угодно) - person Gurbachan Singh; 16.08.2018