- Strings
- Using String Insert Effectively
Using String Insert Effectively

Introduction
Insert is quick way to put one string into another. This is good for string manuluation, output variables into strings or combining strings together.But there is exception that can be raised with incorrect values. There a mulitple ways of doing this including, replace, format, concatenation, and Interpolation so keep in mind that C# has mutiple ways of doing the same way. Also, I'll explain how insert works, and the interworkings of how it can be done.
What is String Insert?
The insert method puts a single string in-between a section of the string. With the first parameter of index, it lets you pick the at what point to insert a string. the second parameter is the string you want to insert. Both of these parameters must be a valid input. The size of the string you want o insert doesn't really matter just as long as it is inserted in the valid range of the existing string.
Syntax
public string Insert(int index, string value)
Notice that the function call allows for a index of the current string where the insert will start. Then in the next parameter you can pass the string you want to insert. Let's see an example, by looking at the code below.
string debugStatement = "Error Generated at for function";//Starting string
DateTime timestamp = DateTime.Now;//Date that we want to insert
int index = 19;//Start index of the insert
string completedStatement = debugStatement.Insert(index, timestamp.ToString()); //Call the insert function
Console.WriteLine(completedStatement);//Display result
Code Output
Error Generated at 5/1/2022 2:15:46 PM for function
This code snippet simple takes an existing string and inserts a date between the at and for text.
String Insert Exceptions
It's important to note when exceptions can happen and when they might happen so that we can guard the code against such cases. The first is index out of range exception
Index Out of Range Exception
This exception comes when the index provided is either less than 0 or greater than the length of the original string. See code sameple below that will generate such error.
string debugStatement = "Error Generated at for function";//Starting string
DateTime timestamp = DateTime.Now;//Date that we want to insert
int index = -1;//Start index of the insert which will cause an exception
string completedStatement = debugStatement.Insert(index2, timestamp.ToString());//Call the insert function
Console.WriteLine(completedStatement);//Display result
Result

As you can see index is less than 0 which is not a valid index in the original string. To handle this case will have a wrapper function over the string insert method to handle such cases. Check out the code below.
//Protection Against String Insert Index Out of Range Exception
string debugStatement = "Error Generated at for function";//Starting string//Starting string
DateTime timestamp = DateTime.Now;//Date that we want to insert
int index = -1;//Start index of the insert which will cause an exception
string completedStatement = InsertText(index, debugStatement, timestamp.ToString());//Call the updated insert function
Console.WriteLine("Result1:" + completedStatement);//Display result
index = 100;//Start index that is outside the length of the original string
completedStatement = InsertText(index, debugStatement, timestamp.ToString());//Call the updated insert function
Console.WriteLine("Result2:" + completedStatement);//Display result
string InsertText(int index, string originalText, string textToInsert)
{
if (index < 0 || index > originalText.Length - 1)
{
return originalText;
}
string newText = originalText.Insert(index, textToInsert);
return newText;
}
In the insert text wrapper function we handle both the case of index being less than 0 and also when the insert index is greater than the length - 1 of the original string.
Null Exception
Null Exception happens when the string we want insert is null. If it was just an empty string it would be ok and there wouldn't be a exception so we must guard the code against a null value. See code below to see how the error can be caused.
string debugStatement = "Error Generated at for function";//Starting string
string? timestamp = null;//Date that we want to insert but since it is null an exception will be thrown
int index = 19;//Start index of the insert which will cause an exception
string completedStatement = debugStatement.Insert(index, timestamp);//Call the updated insert function
Console.WriteLine(completedStatement);//Display result
Result

To resolve this issue. We are going to add a null check to that parameter so that use case will be handled. Now adding that check to the preview created InsertText wrapper function. Inspect the code below.
string debugStatement = "Error Generated at for function";//Starting string//Starting string
string? timestamp = null;//Date that we want to insert but since it is null an exception will be thrown
int index = 19;//Start index of the insert which will cause an exception
string completedStatement = InsertText(index, debugStatement, timestamp);//Call the updated insert function
Console.WriteLine(completedStatement);//Display result
string InsertText(int index, string originalText, string textToInsert)
{
if (index < 0 || index > originalText.Length - 1)
{
return originalText;
}
if(string.IsNullOrEmpty(textToInsert))//Add null check
{
return originalText;
}
string newText = originalText.Insert(index, textToInsert);
return newText;
}
Code Output
Error Generated at 5/1/2022 2:15:46 PM for function
When Might This Function Be Used?
Fixed position or repeated patterns
Cases when it known where the insert index will be all the time and also if there . For example, date time when it known that the day, month or year are a fixed position and length. Also, look for repeated patterns where you might could use the indexyOf to find a certain character or set of characters to find the insert point.
Readablitiy
Another consideration when using this function is how this might keep the code simple ane readable so whenever you can keep the code simple so that others can who might work on the code can come in a quickly understand what is going on that is a good thing. So having this function describes what is doing is useful for readabiblity.
Alternate String Insert Methods
There are other ways of inserting a string into a string because often times when we just don't need to insert one string we need to insert multiple strings at a time. So below are some ways in which we can insert multiple strings into a string at one time.
String Replace
Place holders for strings can be put in string then we use string replace insert at the place holder for that we want to replace. See example below.
string GetQuery(int fileId, string fileType, int userId)
{
string query = @"select
*
from
file_main
where
file_id = [FILE_SCOPE]
and file_type = [TYPE]
and user_id = [USER]";
query = query.Replace("[FILE_SCOPE]", fileId.ToString());//Replace [FILE_SCOPE] with fileId variable
query = query.Replace("[TYPE]", fileType);//Replace [TYPE] with fileType variable
query = query.Replace("[USER]", userId.ToString());//Replace [USER] with userId variable
return query;
}
int fileId = 2318;
string fileType = "CSV";//CSV is a common file type
int userId = 3248;
string queryComplete = GetQuery(fileId, fileType, userId);
Console.WriteLine(queryComplete);
Code Output
select
*
from
file_main
where
file_id = 2318
and file_type = CSV
and user_id = 3248
String Format
String format use places holders in curly braclys starting with 0,1,..n to how many paramters you want to insert into the string. A simple example is below.
string GetQuery(string lastName, string userType)
{
string query = @"select
*
from
user_main
where
last_name = {0}
and user_type = {1}";
string finalQuery = string.Format(query, lastName, userType);
return finalQuery;
}
string lastName = "Shepard";
string userType = "ADMIN";
string queryComplete = GetQuery(lastName, userType);
Console.WriteLine(queryComplete);
Code Output
select
*
from
user_main
where
last_name = Shepard
and user_type = ADMIN
String Concatenation
This type of string insert can be used to combine different strings or insert variables into strings but it can be tedious to construct when as sections and varibles increase.
string GetQuery(string lastName, string userType)
{
string query = "select " +
" * " +
" from" +
" user_main " +
" where " +
" last_name = " + lastName +
" and user_type = " + userType;
string finalQuery = string.Format(query, lastName, userType);
return finalQuery;
}
string lastName = "Shepard";
string userType = "ADMIN";
string queryComplete = GetQuery(lastName, userType);
Console.WriteLine(queryComplete);
Code Output
select * from user_main where last_name = Shepard and user_type = ADMIN
String Interpolation
This way allows to place the variables in line similar to concatenation but it is easier because there is less formating needed
string GetQuery(int fileId, string fileType, int userId)
{
string query = $"select * from file_main where file_id = {fileId} and file_type = {fileType} and user_id = {userId}";
return query;
}
int fileId = 2318;
string fileType = "CSV";//CSV is a common file type
int userId = 3248;
string queryComplete = GetQuery(fileId, fileType, userId);
Console.WriteLine(queryComplete);
Code Output
select * from file_main where file_id = 2318 and file_type = CSV and user_id = 3248
How String Insert Works
There can be may ways to create a string insert function. One way is to use substring to take the substring to the index and take the substring of the index to the end of the string. Then take the text we want to insert and concantenate inbetween the two substrings. See code snippet below.
string InsertInString(string originalText, int index, string textToInsert)
{
if (index < 0 || index > originalText.Length - 1)//Add index check
{
return originalText;
}
if (string.IsNullOrEmpty(textToInsert))//Add null check
{
return originalText;
}
string firstHalf = originalText.Substring(0, index);//Substring of the first half the text
string secondHalf = originalText.Substring(index, (originalText.Length) - index); //Substring of the second half the text
string final = firstHalf + textToInsert + secondHalf;//Concatenate all the strings together
return final;
}
string debugStatement = "Error Generated at for function";//Starting string
DateTime timestamp = DateTime.Now;//Date that we want to insert
int index = 19;//Start index of the insert which will cause an exception
string completedStatement = InsertInString(debugStatement, index, timestamp.ToString());//Call the insert function
Console.WriteLine(completedStatement);//Display result
Code Output
Error Generated at 5/8/2022 3:42:16 PM for function
Conclusion
String Insert gives you a quick option to put text into another. Using the index, you can use it for automated processes or string generation. It has good readabiblity as it describles exactly what it is doing. This is different from the alternate methods that can get the same result as insert but does say that it is inserting. So insert is good for beginners and it's simple with only two parameters.