-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathStringExtensions.cs
More file actions
131 lines (127 loc) · 3.88 KB
/
Copy pathStringExtensions.cs
File metadata and controls
131 lines (127 loc) · 3.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
using System;
using System.Globalization;
using System.Runtime.CompilerServices;
#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member
namespace Platform.Collections
{
/// <summary>
/// <para>
/// Represents the string extensions.
/// </para>
/// <para></para>
/// </summary>
public static class StringExtensions
{
/// <summary>
/// <para>
/// Capitalizes the first letter using the specified string.
/// </para>
/// <para></para>
/// </summary>
/// <param name="@string">
/// <para>The string.</para>
/// <para></para>
/// </param>
/// <returns>
/// <para>The string.</para>
/// <para></para>
/// </returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static string CapitalizeFirstLetter(this string @string)
{
if (string.IsNullOrWhiteSpace(@string))
{
return @string;
}
var chars = @string.ToCharArray();
for (var i = 0; i < chars.Length; i++)
{
var category = char.GetUnicodeCategory(chars[i]);
if (category == UnicodeCategory.UppercaseLetter)
{
return @string;
}
if (category == UnicodeCategory.LowercaseLetter)
{
chars[i] = char.ToUpper(chars[i]);
return new string(chars);
}
}
return @string;
}
/// <summary>
/// <para>
/// Truncates the string.
/// </para>
/// <para></para>
/// </summary>
/// <param name="@string">
/// <para>The string.</para>
/// <para></para>
/// </param>
/// <param name="maxLength">
/// <para>The max length.</para>
/// <para></para>
/// </param>
/// <returns>
/// <para>The string</para>
/// <para></para>
/// </returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static string Truncate(this string @string, int maxLength) => string.IsNullOrEmpty(@string) ? @string : @string.Substring(0, Math.Min(@string.Length, maxLength));
/// <summary>
/// <para>
/// Trims the single using the specified string.
/// </para>
/// <para></para>
/// </summary>
/// <param name="@string">
/// <para>The string.</para>
/// <para></para>
/// </param>
/// <param name="charToTrim">
/// <para>The char to trim.</para>
/// <para></para>
/// </param>
/// <returns>
/// <para>The string</para>
/// <para></para>
/// </returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static string TrimSingle(this string @string, char charToTrim)
{
if (!string.IsNullOrEmpty(@string))
{
if (@string.Length == 1)
{
if (@string[0] == charToTrim)
{
return "";
}
else
{
return @string;
}
}
else
{
var left = 0;
var right = @string.Length - 1;
if (@string[left] == charToTrim)
{
left++;
}
if (@string[right] == charToTrim)
{
right--;
}
return @string.Substring(left, right - left + 1);
}
}
else
{
return @string;
}
}
}
}