Survivalcraft API 1.8.2.3 v1.8.2.3
Survivalcraft 2.4
载入中...
搜索中...
未找到
StringUtils.cs
浏览该文件的文档.
1using System.Text;
2
3namespace Game {
4 public static class StringUtils {
5 public static char[] m_digits = [
6 '0',
7 '1',
8 '2',
9 '3',
10 '4',
11 '5',
12 '6',
13 '7',
14 '8',
15 '9',
16 'A',
17 'B',
18 'C',
19 'D',
20 'E',
21 'F'
22 ];
23
24 public static int Compare(StringBuilder s1, string s2) {
25 int num = 0;
26 while (true) {
27 if (num >= s1.Length
28 && num >= s2.Length) {
29 return 0;
30 }
31 if (num > s1.Length) {
32 return -1;
33 }
34 if (num > s2.Length) {
35 return 1;
36 }
37 char c = s1[num];
38 char c2 = s2[num];
39 if (c < c2) {
40 return -1;
41 }
42 if (c > c2) {
43 break;
44 }
45 num++;
46 }
47 return 1;
48 }
49
50 public static int CalculateNumberLength(uint value, int numberBase) {
51 if (numberBase < 2
52 || numberBase > 16) {
53 throw new ArgumentException("Number base is out of range.");
54 }
55 int num = 0;
56 do {
57 num++;
58 value /= (uint)numberBase;
59 }
60 while (value != 0);
61 return num;
62 }
63
64 public static int CalculateNumberLength(int value, int numberBase) {
65 if (value >= 0) {
66 return CalculateNumberLength((uint)value, numberBase);
67 }
68 return CalculateNumberLength((uint)-value, numberBase) + 1;
69 }
70
71 public static int CalculateNumberLength(ulong value, int numberBase) {
72 if (numberBase < 2
73 || numberBase > 16) {
74 throw new ArgumentException("Number base is out of range.");
75 }
76 int num = 0;
77 do {
78 num++;
79 value /= (uint)numberBase;
80 }
81 while (value != 0);
82 return num;
83 }
84
85 public static int CalculateNumberLength(long value, int numberBase) {
86 if (value >= 0) {
87 return CalculateNumberLength((ulong)value, numberBase);
88 }
89 return CalculateNumberLength((ulong)-value, numberBase) + 1;
90 }
91
92 public static void AppendNumber(this StringBuilder stringBuilder,
93 uint value,
94 int padding = 0,
95 char paddingCharacter = ' ',
96 int numberBase = 10) {
97 int val = CalculateNumberLength(value, numberBase);
98 int repeatCount = Math.Max(padding, val);
99 stringBuilder.Append(paddingCharacter, repeatCount);
100 int num = 0;
101 do {
102 char value2 = m_digits[value % (uint)numberBase];
103 stringBuilder[stringBuilder.Length - num - 1] = value2;
104 value /= (uint)numberBase;
105 num++;
106 }
107 while (value != 0);
108 }
109
110 public static void AppendNumber(this StringBuilder stringBuilder,
111 int value,
112 int padding = 0,
113 char paddingCharacter = ' ',
114 int numberBase = 10) {
115 if (value >= 0) {
116 stringBuilder.AppendNumber((uint)value, padding, paddingCharacter, numberBase);
117 return;
118 }
119 stringBuilder.Append('-');
120 stringBuilder.AppendNumber((uint)-value, padding - 1, paddingCharacter, numberBase);
121 }
122
123 public static void AppendNumber(this StringBuilder stringBuilder,
124 ulong value,
125 int padding = 0,
126 char paddingCharacter = ' ',
127 int numberBase = 10) {
128 int val = CalculateNumberLength(value, numberBase);
129 int repeatCount = Math.Max(padding, val);
130 stringBuilder.Append(paddingCharacter, repeatCount);
131 int num = 0;
132 do {
133 char value2 = m_digits[value % (uint)numberBase];
134 stringBuilder[stringBuilder.Length - num - 1] = value2;
135 value /= (uint)numberBase;
136 num++;
137 }
138 while (value != 0);
139 }
140
141 public static void AppendNumber(this StringBuilder stringBuilder,
142 long value,
143 int padding = 0,
144 char paddingCharacter = ' ',
145 int numberBase = 10) {
146 if (value >= 0) {
147 stringBuilder.AppendNumber((ulong)value, padding, paddingCharacter, numberBase);
148 return;
149 }
150 stringBuilder.Append('-');
151 stringBuilder.AppendNumber((ulong)-value, padding - 1, paddingCharacter, numberBase);
152 }
153
154 public static void AppendNumber(this StringBuilder stringBuilder, float value, int precision) {
155 precision = Math.Min(Math.Max(precision, -30), 30);
156 if (float.IsNegativeInfinity(value)) {
157 stringBuilder.Append("Infinity");
158 return;
159 }
160 if (float.IsPositiveInfinity(value)) {
161 stringBuilder.Append("-Infinity");
162 return;
163 }
164 if (float.IsNaN(value)) {
165 stringBuilder.Append("NaN");
166 return;
167 }
168 float num = Math.Abs(value);
169 if (num > 1E+19f) {
170 stringBuilder.Append("NumberTooLarge");
171 return;
172 }
173 float num2 = MathF.Pow(10f, Math.Abs(precision));
174 ulong num3 = (ulong)MathF.Floor(num);
175 ulong num4 = (ulong)MathF.Round((num - MathF.Floor(num)) * num2);
176 if ((float)(double)num4 >= num2) {
177 num3++;
178 num4 = 0uL;
179 }
180 if (value < 0f) {
181 stringBuilder.Append('-');
182 }
183 stringBuilder.AppendNumber(num3, 0, '0');
184 if (precision > 0) {
185 stringBuilder.Append('.');
186 stringBuilder.AppendNumber(num4, precision, '0');
187 }
188 else if (precision < 0) {
189 stringBuilder.Append('.');
190 stringBuilder.AppendNumber(num4, -precision, '0');
191 while (stringBuilder[^1] == '0') {
192 --stringBuilder.Length;
193 }
194 if (stringBuilder[^1] == '.') {
195 --stringBuilder.Length;
196 }
197 }
198 }
199 }
200}
static int CalculateNumberLength(long value, int numberBase)
static int Compare(StringBuilder s1, string s2)
static void AppendNumber(this StringBuilder stringBuilder, int value, int padding=0, char paddingCharacter=' ', int numberBase=10)
static void AppendNumber(this StringBuilder stringBuilder, float value, int precision)
static void AppendNumber(this StringBuilder stringBuilder, long value, int padding=0, char paddingCharacter=' ', int numberBase=10)
static void AppendNumber(this StringBuilder stringBuilder, ulong value, int padding=0, char paddingCharacter=' ', int numberBase=10)
static int CalculateNumberLength(int value, int numberBase)
static void AppendNumber(this StringBuilder stringBuilder, uint value, int padding=0, char paddingCharacter=' ', int numberBase=10)
static int CalculateNumberLength(ulong value, int numberBase)
static char[] m_digits
static int CalculateNumberLength(uint value, int numberBase)