@MaximIs

Как из символа '\t' получить табуляцию?

Доброго времени суток, приходит строка "1 2\t3", нужно получить "1 2 3", так же во входных строках может быть "\n" и т.д. Как преобразовывать?
  • Вопрос задан
  • 1338 просмотров
Пригласить эксперта
Ответы на вопрос 3
samodum
@samodum
Какой вопрос - такой и ответ
"1 2\t3".replace("\t", " ").replace("\n", " ");
Ответ написан
@Sumor
var sIn = "1 2\t3";		
// Первый способ
var sOut1 = new String(sIn.Select(ch => {switch(ch) 
		{
			case '\t': return ' ';
			case '\n': return ' ';
			default: return ch;
		}
			 }).ToArray());
// Второй способ
var sOut2 = String.Concat(sIn.Select(ch => {switch(ch) 
		{
			case '\t': return ' ';
			case '\n': return ' ';
			default: return ch;
		}
			 }));

Хоть это и выглядит очень страшно, но вот мои аргументы:
- при использовании Replace происходит полный просмотр строки и создание новой строки. При увеличении количества заменяемых символов - увеличивается число просмотров строки:
"1 2\t3".replace("\t", " ").replace("\n", " "); - два просмотра строки и два создания строки
"1 2\t3".replace("\t", " ").replace("\n", " ").replace("|", " "); - три просмотра строки и три создания строки
- в моём варианте, вне зависимости от количества заменяемых символов просмотр строки происходит только один раз, и один раз создаётся строка. Для расширения проверяемых символов - нужно просто добавить case.

Хотите более понятно, пожалуйста:
var sIn = "1 2\t3";		
var sb = new StringBuilder(sIn.Length);
foreach(var ch in sIn)
{
  switch(ch) 
  {
    case '\t': 
    case '\n': 
      sb.Append(' ');
      break;
    default: 
      sb.Append(ch);
      break;
  }
};
var sOut = sb.ToString();
Ответ написан
@d-stream
Готовые решения - не подаю, но...
Символы \t \n \r \b и т.п. - это лишь мнемонические обозначения в исходном тексте программы непечатных символов.
То есть с ними можно произвести ровно такие же жействия как и с заменой буквы "а" на ничего и т.п.

https://docs.microsoft.com/ru-ru/dotnet/api/system...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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