Клавиатура, левая или правая с string.format (не padleft или padright) с произвольной строкой

  1. Символы являются значениями типа char! и задаются следующим образом: c: #"q".
  2. Я бы сказал, что Red пытается скопировать поведение Rebol. А в документации Ребола вы можете найти этот пример:
  3. probe find "here and now" "and"
    "and now"
    
57
задан Community 23 May 2017 в 10:30
поделиться

3 ответа

Существует другое решение.

Реализация IFormatProvider для возврата ICustomFormatter, который будет передан строке. Формат:

public class StringPadder : ICustomFormatter
{
  public string Format(string format, object arg,
       IFormatProvider formatProvider)
  {
     // do padding for string arguments
     // use default for others
  }
}

public class StringPadderFormatProvider : IFormatProvider
{
  public object GetFormat(Type formatType)
  { 
     if (formatType == typeof(ICustomFormatter))
        return new StringPadder();

     return null;
  }
  public static readonly IFormatProvider Default =
     new StringPadderFormatProvider();
}

Затем можно использовать его как это:

string.Format(StringPadderFormatProvider.Default, "->{0:x20}<-", "Hello");
30
ответ дан Noctis 24 November 2019 в 19:48
поделиться

Вы могли инкапсулировать строку в структуре, которая реализует IFormattable

public struct PaddedString : IFormattable
{
   private string value;
   public PaddedString(string value) { this.value = value; }

   public string ToString(string format, IFormatProvider formatProvider)
   { 
      //... use the format to pad value
   }

   public static explicit operator PaddedString(string value)
   {
     return new PaddedString(value);
   }
}

, Затем используют это как этот:

 string.Format("->{0:x20}<-", (PaddedString)"Hello");

результат:

"->xxxxxxxxxxxxxxxHello<-"
11
ответ дан thinkbeforecoding 24 November 2019 в 19:48
поделиться

Редактирование: Я неправильно понял Ваш вопрос, я думал, что Вы спрашивали, как заполнить пробелами.

то, Что Вы спрашиваете, не является возможным использованием string.Format компонент выравнивания; string.Format всегда клавиатуры с пробелом. Посмотрите раздел Alignment Component MSDN: Составной объект, Форматирующий .

Согласно Отражателю, это - код, который работает внутренний StringBuilder.AppendFormat(IFormatProvider, string, object[]), который называют string.Format:

int repeatCount = num6 - str2.Length;
if (!flag && (repeatCount > 0))
{
    this.Append(' ', repeatCount);
}
this.Append(str2);
if (flag && (repeatCount > 0))
{
    this.Append(' ', repeatCount);
}

, Как Вы видите, пробелы трудно кодируются, чтобы быть заполненными пробелом.

2
ответ дан configurator 24 November 2019 в 19:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: