You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
259 lines
8.8 KiB
259 lines
8.8 KiB
using System;
|
|
using System.Collections.Generic;
|
|
using System.Text;
|
|
|
|
namespace Apewer.Internals
|
|
{
|
|
|
|
internal class TextGenerator
|
|
{
|
|
|
|
/// <summary>生成新的 GUID。</summary>
|
|
public static string NewGuid(bool argHyphenation = false, bool argLowerCase = true)
|
|
{
|
|
var vguid = Guid.NewGuid().ToString();
|
|
if (argLowerCase) vguid = vguid.ToLower();
|
|
else vguid = vguid.ToUpper();
|
|
if (!argHyphenation) vguid = vguid.Replace("-", "");
|
|
return vguid;
|
|
}
|
|
|
|
/// <summary>合并字符串。</summary>
|
|
public static string Merge(IEnumerable<string> argStrings)
|
|
{
|
|
if (argStrings == null) return "";
|
|
var vsb = new StringBuilder();
|
|
foreach (var vstring in argStrings)
|
|
{
|
|
if (string.IsNullOrEmpty(vstring)) continue;
|
|
vsb.Append(vstring);
|
|
}
|
|
return vsb.ToString();
|
|
}
|
|
|
|
/// <summary>合并字符串。</summary>
|
|
public static string Merge(params string[] argStrings)
|
|
{
|
|
if (argStrings == null) return "";
|
|
var vsb = new StringBuilder();
|
|
foreach (var vstring in argStrings)
|
|
{
|
|
if (string.IsNullOrEmpty(vstring)) continue;
|
|
vsb.Append(vstring);
|
|
}
|
|
return vsb.ToString();
|
|
}
|
|
|
|
/// <summary>合并字符串。</summary>
|
|
public static string Merge(IEnumerable<char> argChars)
|
|
{
|
|
if (argChars == null) return "";
|
|
var vsb = new StringBuilder();
|
|
foreach (var vchar in argChars)
|
|
{
|
|
vsb.Append(vchar.ToString());
|
|
}
|
|
return vsb.ToString();
|
|
}
|
|
|
|
/// <summary>合并字符串。</summary>
|
|
public static string Merge(params char[] argChars)
|
|
{
|
|
if (argChars == null) return "";
|
|
var vsb = new StringBuilder();
|
|
foreach (var vchar in argChars)
|
|
{
|
|
vsb.Append(vchar.ToString());
|
|
}
|
|
return vsb.ToString();
|
|
}
|
|
|
|
private static int Asc(char argChar)
|
|
{
|
|
int num = Convert.ToInt32(argChar);
|
|
if (num < 128) return num;
|
|
int result = 0;
|
|
try
|
|
{
|
|
Encoding fileIOEncoding = Encoding.Default;
|
|
char[] chars = new char[] { argChar };
|
|
if (fileIOEncoding.IsSingleByte)
|
|
{
|
|
byte[] array = new byte[1];
|
|
int bytes = fileIOEncoding.GetBytes(chars, 0, 1, array, 0);
|
|
result = (int)array[0];
|
|
}
|
|
else
|
|
{
|
|
byte[] array = new byte[2];
|
|
int bytes = fileIOEncoding.GetBytes(chars, 0, 1, array, 0);
|
|
if (bytes == 1)
|
|
{
|
|
result = (int)array[0];
|
|
}
|
|
else
|
|
{
|
|
if (BitConverter.IsLittleEndian)
|
|
{
|
|
byte b = array[0];
|
|
array[0] = array[1];
|
|
array[1] = b;
|
|
}
|
|
result = (int)BitConverter.ToInt16(array, 0);
|
|
}
|
|
}
|
|
}
|
|
catch { }
|
|
return result;
|
|
}
|
|
|
|
/// <summary>按字符编码获取字符。</summary>
|
|
public static char Chr(int argCode)
|
|
{
|
|
if (argCode < -32768 || argCode > 65535) return ' ';
|
|
if (argCode >= 0 && argCode <= 127) return Convert.ToChar(argCode);
|
|
checked
|
|
{
|
|
char result;
|
|
try
|
|
{
|
|
Encoding encoding = Encoding.Default;
|
|
if (encoding.IsSingleByte && (argCode < 0 || argCode > 255))
|
|
{
|
|
return ' ';
|
|
}
|
|
char[] array = new char[2];
|
|
byte[] array2 = new byte[2];
|
|
Decoder decoder = encoding.GetDecoder();
|
|
if (argCode >= 0 && argCode <= 255)
|
|
{
|
|
array2[0] = (byte)(argCode & 255);
|
|
int chars = decoder.GetChars(array2, 0, 1, array, 0);
|
|
}
|
|
else
|
|
{
|
|
array2[0] = (byte)((argCode & 65280) >> 8);
|
|
array2[1] = (byte)(argCode & 255);
|
|
int chars = decoder.GetChars(array2, 0, 2, array, 0);
|
|
}
|
|
result = array[0];
|
|
}
|
|
catch { return ' '; }
|
|
return result;
|
|
}
|
|
}
|
|
|
|
/// <summary>获取 ASCII 字符。</summary>
|
|
/// <param name="argCode">ASCII 值。</param>
|
|
public static string Ascii(int argCode)
|
|
{
|
|
try { return Chr(argCode).ToString(); }
|
|
catch { return ""; }
|
|
}
|
|
|
|
/// <summary>获取范围内 ASCII 值连续的字符。</summary>
|
|
/// <param name="argBegin">范围起始 ASCII 值。</param>
|
|
/// <param name="argEnd">范围结束 ASCII 值。</param>
|
|
public static string Ascii(int argBegin, int argEnd)
|
|
{
|
|
try
|
|
{
|
|
int vb = argBegin;
|
|
int ve = argEnd;
|
|
if (vb == ve) return Ascii(vb);
|
|
else
|
|
{
|
|
var vr = new TextBuilder();
|
|
if (vb < ve)
|
|
{
|
|
for (int i = vb; i <= ve; i++) vr.Append(Ascii(i));
|
|
}
|
|
else
|
|
{
|
|
for (int i = vb; i >= ve; i--) vr.Append(Ascii(i));
|
|
}
|
|
return vr.Value;
|
|
}
|
|
}
|
|
catch { return ""; }
|
|
}
|
|
|
|
/// <summary>重复指定子字符串,直到达到指定长度。</summary>
|
|
/// <param name="argCell">子字符串。</param>
|
|
/// <param name="argLength">目标字符串的长度。</param>
|
|
public static string CopyChar(string argCell, int argLength)
|
|
{
|
|
if (argLength > 0)
|
|
{
|
|
var vcell = string.IsNullOrEmpty(argCell) ? " " : argCell;
|
|
var vtext = new TextBuilder();
|
|
while (vtext.Length < argLength) vtext.Append(vcell);
|
|
var vresult = vtext.Value;
|
|
if (vresult.Length > argLength) vresult = vresult.Substring(0, argLength);
|
|
return vresult;
|
|
}
|
|
return "";
|
|
}
|
|
|
|
/// <summary>获取指定长的的空格。</summary>
|
|
public static string Space(int argLength)
|
|
{
|
|
return CopyChar(" ", argLength);
|
|
}
|
|
|
|
/// <summary>获取首字母大写的拼音。</summary>
|
|
private static string GetHeadLetterByString(string argText)
|
|
{
|
|
string tempStr = "";
|
|
foreach (char vchar in argText)
|
|
{
|
|
if ((int)vchar >= 33 && (int)vchar <= 126)
|
|
{//字母和符号原样保留
|
|
tempStr += vchar.ToString();
|
|
}
|
|
else
|
|
{//累加拼音声母
|
|
tempStr += GetHeadLetterByChar(vchar.ToString());
|
|
}
|
|
}
|
|
return tempStr;
|
|
}
|
|
|
|
/// <summary>取单个字符的拼音声母</summary>
|
|
/// <param name="argChar">要转换的单个汉字</param>
|
|
/// <returns>拼音首字母</returns>
|
|
public static string GetHeadLetterByChar(string argChar)
|
|
{
|
|
byte[] array = new byte[2];
|
|
array = Encoding.Default.GetBytes(argChar);
|
|
int i = (short)(array[0] - '\0') * 256 + ((short)(array[1] - '\0'));
|
|
if (i < 0xB0A1) return "*";
|
|
if (i < 0xB0C5) return "a";
|
|
if (i < 0xB2C1) return "b";
|
|
if (i < 0xB4EE) return "c";
|
|
if (i < 0xB6EA) return "d";
|
|
if (i < 0xB7A2) return "e";
|
|
if (i < 0xB8C1) return "f";
|
|
if (i < 0xB9FE) return "g";
|
|
if (i < 0xBBF7) return "h";
|
|
if (i < 0xBFA6) return "j";
|
|
if (i < 0xC0AC) return "k";
|
|
if (i < 0xC2E8) return "l";
|
|
if (i < 0xC4C3) return "m";
|
|
if (i < 0xC5B6) return "n";
|
|
if (i < 0xC5BE) return "o";
|
|
if (i < 0xC6DA) return "p";
|
|
if (i < 0xC8BB) return "q";
|
|
if (i < 0xC8F6) return "r";
|
|
if (i < 0xCBFA) return "s";
|
|
if (i < 0xCDDA) return "t";
|
|
if (i < 0xCEF4) return "w";
|
|
if (i < 0xD1B9) return "x";
|
|
if (i < 0xD4D1) return "y";
|
|
if (i < 0xD7FA) return "z";
|
|
return "*";
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|