Замена части строки динамически
У меня есть исходная строка по типу "msp.203.321.33"
Мне нужно при определённых условиях перед первой точкой вставлять и заменять 1 строку, которая меняется. Чтобы это работало по принципу интерполяции (типа так: "msp{нужная мне строка}.203.321.33").
У кого-то есть варианты как это можно запилить?
P.S. Хотел уточнить некоторые детали.
- Строку я изначально не знаю и получаю ее из элемента
- Строка которую я хочу вставлять состоит из одного или двух символов.
UPD: Спасибо комментаторам, у меня вышло что-то подобное. Только есть проблема с тем, что код нормально производит замену если приходит в конкатенацию 1 символ, если 2, то он просто вставляет первый. Вот код:
private void UpdateVendorCode()
{
var _codeString = TempStorage.Subtitle; // MP.208.09.56
var _sign =_lightsCharacter + _currentSizeCharacter; // "X" or "YX"
var _firstDotIndex = _codeString.IndexOf(".", StringComparison.Ordinal); // 1st dot index
var _firstPart = _codeString.Substring(0, _firstDotIndex);
var _lastPart = _codeString.Substring(_firstDotIndex, _codeString.Length - _firstPart.Length);
subtitle.text = _firstPart + _sign + _lastPart;
}
По сути результатом должно быть Либо MPX.208.09.56 либо MPXY.208.09.56, но когда я выполняю действие которое должно вставить Y - оно просто заменяет X, а не добавляет.
Ответы (3 шт):
Элементарная задачка)
Код добавления в строчку:
private string strAdd(string original, string add)
{
string[] origM = original.Split('.');
origM[0] += add;
return string.Join(".",origM);
}
Использование:
string result = strAdd("msp.203.321.33","xy");
Результат:
mspxy.203.321.33
Для замены можете использовать такое:
private string strRep(string original, string add)
{
string[] origM = original.Split('.');
origM[0] = add;
return string.Join(".",origM);
}
Я решил именно таким образом.
private void UpdateVendorCode()
{
var _codeString = TempStorage.Subtitle; // MP.208.09.56
var _sign =_lightsCharacter + _currentSizeCharacter; // "X" or "YX"
var _firstDotIndex = _codeString.IndexOf(".", StringComparison.Ordinal); // 1st dot index
var _firstPart = _codeString.Substring(0, _firstDotIndex);
var _lastPart = _codeString.Substring(_firstDotIndex, _codeString.Length - _firstPart.Length);
subtitle.text = _firstPart + _sign + _lastPart;
}
С помощью регулярных выражений можно в одну строчку.
using System.Text.RegularExpressions;
var input = "A.x.x.x";
var result = new Regex(@"\.").Replace(input, "B.", 1);
System.Console.WriteLine(result);
// AB.x.x.x
Или вот ещё однострочный вариант, даже без регулярок:
using System.Linq;
var input = "A.x.x.x";
var result = input.Split(".", 2).Aggregate((a, b) => $"{a}B.{b}");
System.Console.WriteLine(result);
// AB.x.x.x