c#字符串小技巧 :多空格,多逗号
1.正规表达式:System.Text.RegularExpressions.Regex.Replace(str, "([ ]+)", "") -- str是输入或要检测的字符串。
正则表达式方法Regex.Replace()和匹配符\s(匹配任何空白字符,包括空格,制表符,换页符等,与[\f\n\t\r\v]等效)
//使用正则去除空格,换行,制表符,换页符 Regex regex =new Regex("\\s+",RegexOptions.IgnoreCase); string result = regex.Replace(str,""); Console.WriteLine(result);
在C#开发过程中经常会碰到去除空格的问题,去除两边空格用Trim(),那怎样把中间的连续的多个空格替换为一个空格呢,可以使用正则表达式就可以了; 代码: public string GetStrFields(string strWords) { Regex replaceSpace = new Regex(@"\s{1,}", RegexOptions.IgnoreCase); return replaceSpace.Replace(strWords, ",").Trim(); } Regex 参数 \s 代表空格 {1,} 代表1个以上的连续空格 RegexOptions.IgnoreCase 代表不区分大小写 这样1到多个连续空格就被替换成",";在程序中就可以根据逗号来处理了
将多个逗号变成一个逗号分隔
using System.Text.RegularExpressions;
/// <summary> /// 格式化一组如:",,a,s,,,d,c"的字符串为标准的分隔字符串如:"a,s,d,c"; /// </summary> /// <param name="str">ref 需要格式化的字符</param> private void strFormat(ref string str) { string regexText = "\\,{2,}"; string[] strArray = Regex.Split(str,regexText); str = ""; foreach (string strf in strArray) { if(strf != "") { str += strf + ","; } } //以上代码得到 xx,xxx,x,xx,x, 则需要去掉最后一个逗号 既满足标准分隔符条件 str = str.Substring(0, str.Length - 1); }
X项目中测试
///测试字符处理,将多余的空格和逗号清理掉 ////var item = "95,,, 2, ,1"; //var item = "9521"; //if (!string.IsNullOrEmpty(item)) //{ // item = new System.Text.RegularExpressions.Regex("[\\s]+").Replace(item, ","); // item = new System.Text.RegularExpressions.Regex("[,]+").Replace(item, ","); // Debug.LogError(item); // var lengthTemp= item.Split(',').Length; // Debug.LogError("lengthTemp"+lengthTemp); //} ///逗号分割的字符串,截取前5个值 //string x= "1,1,2,3,4,5,6,7,8,9"; //string[] vs = x.Split(','); //Array.Resize(ref vs, 5); //currentMsg = ""; //foreach (var item in vs) //{ // currentMsg+= item+","; //} //Debug.LogError("currentMsg:"+ currentMsg.TrimEnd(','));
2.使用字符串自带的Replace方法:str.Replace(" ","")------------- str是输入或要检测的字符串。
String.Replace()函数可以去掉字符串中 所有 的空格
string str = " Hello World !\n Hello World ! "; str.Replace(" ", "")
3.String.Trim() ,TrimStart(),TrimEnd() 去掉字符串 前后 的空格
string str = " Hello World !\n Hello World ! "; str.Trim()
4.由于空格的ASCII码值是32,因此,在去掉字符串中所有的空格时,只需循环访问字符串中的所有字符,并判断它们的ASCII码值是不是32即可。去掉字符串中所有空格的关键代码如下:
- CharEnumerator CEnumerator = textBox1.Text.GetEnumerator();
- while (CEnumerator.MoveNext())
- {
- byte[] array = new byte[1];
- array = System.Text.Encoding.ASCII.GetBytes(CEnumerator.Current.ToString());
- int asciicode = (short)(array[0]);
- if (asciicode != 32)
- {
- textBox2.Text += CEnumerator.Current.ToString();
- }
- }
这里的3种方法只能去除半角空格,不能去除全角空格。
//去掉字符串 中间 及 前后 的空格 Debug.Log("你好呀 嗯 好你 看有" + str.Replace(" ","")); //打印结果:你好呀嗯好你看有 //分隔符取值: public string QuZhiA(string str) { string a= str.Replace(" ",""); var temps = a.Split('-'); string str01=""; for (int i = 0; i < temps.Length; i++) { str01 = temps[0]; } return str01; } //调用: Debug.Log("000000000000="+ QuZhiA("0.5-0.55")); 结果:0.5
1. 判断text是否为int
//判断实数的正则表达式为 ^-?\d+\.?\d*$ //具体方法 //1、添加引用 using System.Text.RegularExpressions; //2、 string regex = @"^-?\d+\.?\d*$"; bool result = Regex.IsMatch(字符, regex); //result 结果为 true时,字符实数
2.比较两个字符串是否相等
/// <summary> /// 比较两个字符串是否相等 /// </summary> /// <param name="A"></param> /// <param name="B"></param> /// <returns></returns> public static bool StrComparison(string A, string B) { string variable01 = A.Replace(" ", ""); string variable02 = B.Replace(" ", ""); char[] c1 = variable01.ToCharArray(); char[] c2 = variable02.ToCharArray(); Array.Sort(c1); Array.Sort(c2); string t1 = new String(c1).ToUpper(); string t2 = new String(c2).ToUpper(); if (t1.Trim() == t2.Trim())//去除 首尾空格 { return true; } else { return false; } }
3.unity C#字符串读取
using UnityEngine; using System.Collections; using UnityEngine.UI; public class MyTextChar : MonoBehaviour { private Text uiText; //储存中间值 private string words; //每个字符的显示速度 private float timer; private float timer2; //限制条件,是否可以进行文本的输出 private bool isPrint = false; private float perCharSpeed = 1; private int text_length = 0; private string Ctext; // Use this for initialization void Start() { uiText = GetComponent<Text>(); words = GetComponent<Text>().text; isPrint = true; } // Update is called once per frame void Update() { printText(); } void printText() { try { if (isPrint) { uiText.text = words.Substring(0, (int)(perCharSpeed * timer));//截取 timer += Time.deltaTime; } } catch (System.Exception) { printEnd(); } } void printEnd() { isPrint = false; } }
4.字符串 剔除使用
DLChangDu = int.Parse(DaLouChangDu.text.TrimEnd('m'));//剔除结尾m 使用整数部分 string.TrimStart() //删除字符串头部空格 string.TrimEnd() //删除字符串尾部空格 string.Trim() //删除字符串头部和尾部空格,由外向内,直到碰到非空格才会停止
下面两种方法实现去除字符串s1末尾的逗号:
方法一:
s1 = s1.Remove(s1.LastIndexOf(","), 1);
在方法一种,如果s1的末尾有多个逗号,只会删除最后一个逗号.
例如:
string s1="张三,李四,王五,,";
s1 = s1.Remove(s1.LastIndexOf(","), 1);
//s1的结果为 张三,李四,王五,
方法二:
s1.TrimEnd(',');
在方法二种,如果s1的末尾有多个逗号,会全部删除.
例如:
string s1="张三,李四,王五,,";
s1.TrimEnd(',');
//s1的结果为 张三,李四,王五
5.是否包含
if (!DaLouChangDu.text.Contains("m"))//是否存在m
6.删除指定位置字符
//删除此字符串中从指定位置到最后位置的所有字符。 Remove(int startIndex): //从此实例中的指定位置开始删除指定数目的字符。 Remove(int startIndex, int length): //从此实例检索子字符串。子字符串从指定的字符位置开始。 Substring(int startIndex): //从此实例检索子字符串。子字符串从指定的字符位置开始且具有指定的长度。 Substring(int startIndex, int length):
7.分割字符串:
static void Main() { string _testStr = "痴#情,的妖:怪啊,请再;等一世吧!"; char[] _separator = { '#', ',', ':', ';' }; string[] _splitsStrings = _testStr.Split(_separator); for (int i = 0; i < _splitsStrings.Length; i++) { Console.WriteLine("子字符串{0}:{1}", i, _splitsStrings[i]); } Console.ReadKey(); }
8.截取字符串
SubString方法可以截取字符串中指定索引位置及指定长度的字符。(字符串中的索引是从0开始)
string _testStr = "痴情的妖怪啊,请再等一世吧!"; string _subStr = _testStr.Substring(3, 4); //从索引3开始,截取四个字符 Console.WriteLine(_subStr);
9.获取时间戳(long)
using System; using UnityEngine; public class TimeTest : MonoBehaviour { DateTime startTime; private void Start() { //获取开始时的时间 startTime = DateTime.Now; Debug.Log("startTime="+ startTime); //获取当前时间戳 long unixTime = ConvertDateTimep(DateTime.Now); Debug.Log(unixTime); //将时间戳转换为DateTime Debug.Log(GetTime(unixTime.ToString()).ToString()); Debug.Log(GetTime(unixTime.ToString()).Year); Debug.Log(GetTime(unixTime.ToString()).Month); Debug.Log(GetTime(unixTime.ToString()).Day); Debug.Log(GetTime(unixTime.ToString()).Hour); Debug.Log(GetTime(unixTime.ToString()).Minute); Debug.Log(GetTime(unixTime.ToString()).Second); } /// <summary> /// 获取时间戳(精确到秒) /// TimeTool.ConvertDateTimep(DateTime.Now) /// </summary> /// <param name="time">时间</param> public static long ConvertDateTimep(DateTime time) { return ((time.ToUniversalTime().Ticks - 621355968000000000) / 10000000); //等价于: //return ((time.ToUniversalTime().Ticks - new DateTime(1970, 1, 1, 0, 0, 0, 0).Ticks) / 10000000) * 1000; } /// <summary> /// 获得时间戳 /// </summary> /// <returns></returns> private long GetTime() { //精确到毫秒 return new DateTimeOffset(DateTime.UtcNow).ToUnixTimeSeconds(); } /// <summary> /// 时间戳转为C#格式时间 /// TimeTool.GetTime(TimeTool.ConvertDateTiemp(DateTime.Now).ToString()) /// </summary> /// <param name="timeStamp">时间戳</param> /// <returns></returns> public static DateTime GetTime(string timeStamp) { if (timeStamp.Length > 10) { timeStamp = timeStamp.Substring(0, 10); } DateTime dateTimeStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); long lTime = long.Parse(timeStamp + "0000000"); TimeSpan toNow = new TimeSpan(lTime); return dateTimeStart.Add(toNow); } private void Update() { if (Input.GetKeyDown(KeyCode.Z)) { //获取当前时间,并打印当前时间与开始时间相差秒数(以秒为单位) DateTime curtimer = DateTime.Now; Debug.Log(curtimer); int timer = GetSubSeconds(startTime, curtimer); Debug.Log(timer); } } /// <summary> /// 获取间隔秒数 /// </summary> /// <param name="startTimer"></param> /// <param name="endTimer"></param> /// <returns></returns> public int GetSubSeconds(DateTime startTimer, DateTime endTimer) { TimeSpan startSpan = new TimeSpan(startTimer.Ticks); TimeSpan nowSpan = new TimeSpan(endTimer.Ticks); TimeSpan subTimer = nowSpan.Subtract(startSpan).Duration(); //返回间隔秒数(不算差的分钟和小时等,仅返回秒与秒之间的差) //return subTimer.Seconds; //返回相差时长(算上分、时的差值,返回相差的总秒数) return (int)subTimer.TotalSeconds; } /// <summary> /// 获取两个时间的相差多少分钟 /// </summary> /// <param name="startTimer"></param> /// <param name="endTimer"></param> /// <returns></returns> public int GetSubMinutes(DateTime startTimer, DateTime endTimer) { TimeSpan startSpan = new TimeSpan(startTimer.Ticks); TimeSpan nowSpan = new TimeSpan(endTimer.Ticks); TimeSpan subTimer = nowSpan.Subtract(startSpan).Duration(); //返回相差时长(仅返回相差的分钟数) //return subTimer.Minutes; //返回相差时长(仅返回相差的总分钟数) return (int)subTimer.TotalMinutes; } /// <summary> /// 获取两个时间的相差多少小时 /// </summary> /// <param name="startTimer"></param> /// <param name="endTimer"></param> /// <returns></returns> public int GetSubHours(DateTime startTimer, DateTime endTimer) { TimeSpan startSpan = new TimeSpan(startTimer.Ticks); TimeSpan nowSpan = new TimeSpan(endTimer.Ticks); TimeSpan subTimer = nowSpan.Subtract(startSpan).Duration(); //返回相差时长(仅返回相差的小时) //return subTimer.Hours; //返回相差时长(返回相差的总小时数) return (int)subTimer.TotalHours; } /// <summary> /// 获取两个时间的相差多少天 /// </summary> /// <param name="startTimer"></param> /// <param name="endTimer"></param> /// <returns></returns> public int GetSubDays(DateTime startTimer, DateTime endTimer) { TimeSpan startSpan = new TimeSpan(startTimer.Ticks); TimeSpan nowSpan = new TimeSpan(endTimer.Ticks); TimeSpan subTimer = nowSpan.Subtract(startSpan).Duration(); //返回相差时长(仅返回相差的天数) //return subTimer.Days; //返回相差时长(返回相差的总天数) return (int)subTimer.TotalDays; } }
保留 后几位小数点
一、float转换为string:ToString("f3"):保留3位小数点,3代表保留多少位小数点 str_tmp +="\n"+ arrTargetAngles[i].ToString("f3"); 一、string转换为float保留多少位小数点 好像是多少位就是多少位,超出范围另当别论 float.TryParse(student.Attributes["x"].Value, out targetVec3[i].x); float f_tmp_x = float.Parse(student.Attributes["x"].Value); ———————————————— 原文链接:https://blog.csdn.net/qq_40544338/article/details/102678178
字符串 替换 也可以去除某个字符
字符串替换 string s = “siki”; string newStr = s.Replace(‘i’, ‘h’);//用指定字符更换另一个字符,用后面的替换前面的 string newStr = s.Replace(“si”, “zaaa”);//用指定字符更换另一个字符,用后面的替换前面的,长度不要 求一致 t2.Replace(" ", "")//去除 所有空格 t2.Replace(",", "")//去除 所有逗号