What method in the String class returns only the first N characters?
public static string TruncateLongString(this string str, int maxLength)
{
if (string.IsNullOrEmpty(str)) return str;
return str.Substring(0, Math.Min(str.Length, maxLength));
}
In C# 8 or later it is also possible to use a Range to make this a bit terser:
public static string TruncateLongString(this string str, int maxLength)
{
return str?[0..Math.Min(str.Length, maxLength)];
}
Which can be further reduced using an expression body:
public static string TruncateLongString(this string str, int maxLength) =>
str?[0..Math.Min(str.Length, maxLength)];
Note null-conditional operator (?
) is there to handle the case where str
is null. This replaces the need for an explict null check.
How do I get the first n characters of a string without checking the size or going out of bounds?
Here's a neat solution:
String upToNCharacters = s.substring(0, Math.min(s.length(), n));
Opinion: while this solution is "neat", I think it is actually less readable than a solution that uses if
/ else
in the obvious way. If the reader hasn't seen this trick, he/she has to think harder to understand the code. IMO, the code's meaning is more obvious in the if
/ else
version. For a cleaner / more readable solution, see @paxdiablo's answer.
Keep only first 60 characters of a string
Use Substring
Note: you need to check you input's length
string data = Model.Products[i].Description;
string temp = string.Empty;
if(!string.IsNullOrEmpty(data) && data.Length >= 60)
temp = data.Substring(0,60);
else
temp = data;
First n characters of string or whole string; without SubscriptOutOfBounds
String>>truncateTo:
'abcdef' truncateTo: 30. "'abcdef'"
'abcdef' truncateTo: 3. "'abc'"
String-matching first n letters of two strings
I think the fastest approach would be to use Binaray Search, which will give you O(logn) complexity instead of O(n).
Here n is the length of smallest string.
The approach is simple in binary search. Look for similarity end for the index character in both the strings. For example if i is your index then check i+1 for dis-similarity character where character at i index is similar. And if that is the case break, return i as your answer. Or else keep on searching in sub-scope.
Edit
Adding function for better understanding.
int lengthOfFirstSimilarCharacters(String str1, String str2) {
int strlen1 = str1.length();
int strlen2 = str2.length();
if(strlen1 > strlen2){
return lengthOfFirstSimilarCharacters(str2,str1);
}
int i = 0;
int j = strlen1-1;
while(i<=j){
int mid = i + (j-i)/2;
if(str1.charAt(mid) == str2.charAt(mid)) {
if(mid+1<strlen1 && str1.charAt(mid+1) != str2.charAt(mid+1)){
return mid+1;
}
i = mid+1;
}else{
j = mid-1;
}
}
return i;
}
Write a public method firstFifteen() that returns a String consisting of the first fifteen characters in the longNumber
I'm not entirely sure you need firstFifteen
as a field. You can simply grab the first 15 characters
return longNumber.substring(0, 15);
You also don't need a parameter for that method, since longNumber
is a field
Related Topics
Visual Studio One Project with Several Dlls as Output
How to Download a File to Browser from Azure Blob Storage
What Is the Correct Way to Read from Networkstream in .Net
How to Include Line Numbers in a Stack Trace Without a Pdb
How to Fix "The Connectionstring Property Has Not Been Initialized"
Unity Create UI Control from Script
Why Does Visual Studio Type a Newly Minted Array as Nullable
Get All Registered Routes in ASP.NET Core
Unload a Dll Loaded Using Dllimport
How to Increase Executiontimeout for a Long-Running Query
How to Execute an X86 Assembly Sequence from Within C#
How to Find One Image Inside of Another
Sharing Data Between Appdomains
A Type for Date Only in C# - Why Is There No Date Type