You can "split" a string into a string[] using any arbitrary string(s) as the criterion:
string[] spliton = new string[]{"!@#$%"};
string test = @"Val1!@#$%Val2!@#$%Val3!@#$%Val4";
IEnumerable<string> splitAry = this.test.Split(spliton, StringSplitOptions.RemoveEmptyEntries).Reverse();
StringBuilder sb = new StringBuilder();
foreach (string str in splitAry)
{
sb.Append(str);
sb.Append(spliton[0]);
}
string final = sb.ToString();
If you want to use Linq a bit more to make this shorter:
private List<string> ReverseAndAppend(string source, string appendelement)
{
return source
.Split(new string[]{appendelement}, StringSplitOptions.RemoveEmptyEntries)
.Reverse()
.Select(str => string.Concat(str, appendelement)).ToList();
}