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即可。去掉字符串中所有空格的关键代码如下:

  1. CharEnumerator CEnumerator = textBox1.Text.GetEnumerator(); 
  2. while (CEnumerator.MoveNext()) 
  3. byte[] array = new byte[1]; 
  4. array = System.Text.Encoding.ASCII.GetBytes(CEnumerator.Current.ToString()); 
  5. int asciicode = (short)(array[0]); 
  6. if (asciicode != 32) 
  7. 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("", "")//去除 所有逗号

 

posted @ 2024-03-13 15:39  WalkingSnail  阅读(83)  评论(0编辑  收藏  举报