1:要判断2个字符串变量是否相等,最高效的方法是看它们是否指向相同的内存地址。前面使用RefernceEquals方法来比较。如果2个变量指向的是不同的内存地址,那么就需要逐字符的比较2个字符串的变量,才能确认它们是否相等。由于逐字比较会花费大量的时间,降低性能。所以.NET提供了String.Equals方法来优化比较过程该方法能自动地完成引用比较和值比较。

string str1="abc";

string str2="abc";

string str3=String.Copy(str2);

string str4="abc";

Console.WriteLine(String.Equals(str1,str2)); //true;

Console.WriteLine(str1.Equals(str3));        //true;

Console.WriteLine(str1 == str3);             //true;

Console.WriteLine(str1 == str4);             //false;

其实“==”操作符,它实际上在底层是调用Equals方法,这是完成比较的一种简捷方式。虽然Equals方法已经满足了大多数的比较的需要,但是此方法没有重载方法,不支持区分大小写,和考虑每个国家的文化因素

  • 2

    2:String.Compare是一个比较灵活的比较方法,由于考虑到大小写或文化因素,就可以使用此方法。因为它有许多重载的形式,可以接受大小写或文化的参数,也支持子串比较。

    语法如下;

    int Compare(string str1,string str2);//指定要比较的字符串;

    Compare(string str1,string str2,bool IgnoreCase);//bool IgnoreCase默认为false,如果是true,则不区分大小写的比较。

    Compare(string str1,string str2,bool IgnoreCase,CulureInfo ci);//CulureInfo ci,要使用的文化。

    Compare(string str1,int index1,string str2,int index2,int len);//index1和index2分别表示str1和str2的起始位置。

    Compare返回一个表示比较结果的整数值,两个字符相同,则返回0;如果第一个字符串小宇第二个字符串,则返回小于0;如果第一个字符串大于第二字符串,返回值大于0;

    int result;

    string str1="ABC";

    string str2="abc";

    result=string.Compare(str1,str2);//返回1,因为A比a大;

    result=string.Compare(str1.str2,false);//返回1,区分大小写;

    result=string.Compare(str1,str2,ture);//返回0,不区分大小写;

    在编写程序是,要考虑的文化因素影响。.NET给各种文化的分别提供了一组准则,在执行Compare方法时,CLR会检查相关文化,并使用相对应的准则。Compare方法提供了一个CultureInfo对象参数。

    CultureInfo ci = new CultureInfo("cs-cz");

    要明确的指定一个默认文化或者无文化信息,CultureInfo类提供了2个成员属性,CurrentCulture(当前线程相关文化)和InvariantCulure(忽略文化因素),可以作为参数传递给方法。这样使得程序具有自描性,可以清楚的这些方法是否受到文化的影响。

  • 3

    3:String.CompareOrdinal是对严格基于字符的序数值完成比较。它其实是使用一种简单的算法来比较2个字符串的Unicode值。如果第一个字符串小于第二个字符串,则返回小于0;如果是2个字符串相等,返回0;如果第一个字符串大于第二字符串,则返回大于0的值。

    string str1=“Abc”;

    string str2=“abc”;

    result=string.Compare(str1,str2,false,CultureInfo.InvariantCulture);//返回1,A比a大,不受文化影响。

    result=string.CompareOrdinal(str1,str2);返回负数-20。因为CompareOrdinal比较的是底层的Unicode值。A(U+0041)小于a(U+0061),所以第一个字符串小于第二个字符串。

转载于:https://www.cnblogs.com/1175429393wljblog/p/4802644.html

深入解析字符串的比较方法:“==”操作符;String.Equals方法;String.Compare方法;String.CompareOrdinal方法。...相关推荐

  1. string.Equals和tring.Compare比较字符串(并且忽略大小写)

    1.String.Equals(比较值1,比较值2,条件) 这个方法返回一个bool值 例如:String.Equals(str1,str2,StringComparison.CurrentCultu ...

  2. c 语言string类用法,C++中的string类用法简介

    本文主要介绍C++中的string类的常见用法. 1. 概述 string是C++标准库的一个重要的部分,主要用于字符串处理.可以使用输入输出流方式直接进行string操作,也可以通过文件等手段进行s ...

  3. 为什么要使用String.Equals over ==? [重复]

    本文翻译自:Why would you use String.Equals over ==? [duplicate] This question already has an answer here: ...

  4. 【Android NDK 开发】JNI 方法解析 ( 字符串数组参数传递 | 字符串遍历 | 类型强转 | Java 字符串与 C 字符串转换 | 字符串释放 )

    文章目录 I . C/C++ 中的 Java 字符串数组类型 II . 获取字符串数组长度 III . 获取字符串数组元素 IV . 类型强转 ( jobject -> jstring ) V ...

  5. [转]解析字符串的方法

    解析字符串的方法 char st[]="123.45ab"; 解析这一段字符串,有很多种方法.这里介绍一个在"stdio.h"里面的函数: sscanf(-); ...

  6. java---编写一个方法,返回一个int型的二维数组,数组中的元素通过解析字符串参数获得。

    题目: 编写一个方法,返回一个int型的二维数组,数组中的元素通过解析字符串参数获得,字符串如下"1,2:3,4,5:6,7"对应的数组为: d[0][0]=1 d[0][1]=2 ...

  7. java解析字符串_用Java解析字符串有哪些不同的方法?

    用Java解析字符串有哪些不同的方法? 对于解析播放器命令,我最常使用split方法通过定界符对字符串进行分割,然后再通过一系列ifs或switches找出其余部分. Java中解析字符串的几种不同方 ...

  8. String性能提升10倍的几个方法!(源码+原理分析)

    来自:Java中文社群 String 类型是我们使用最频繁的数据类型,没有之一.那么提高 String 的运行效率,无疑是提升程序性能的最佳手段. 我们本文将从 String 的源码入手,一步步带你实 ...

  9. java代码中fastjson生成字符串和解析字符串的方法和javascript文件中字符串和json数组之间的转换方法...

    1.java代码中fastjson生成字符串和解析字符串的方法 List<TemplateFull> templateFulls = new ArrayList<TemplateFu ...

  10. 数组元素数组中的元素通过解析字符串参数获得

    返回数组,数组元素数组中的元素通过解析字符串参数获得 编写一个方法,返回一个int型的二维数组,数组中的元素通过解析字符串参数获得,字符串如下"1,2:3,4,5:6,7"对应的数 ...

最新文章

  1. 浏览器输入「xxxxhub」的背后.....
  2. 什么是 SAP UI5 的 Hybrid Web Containers
  3. 【转】android Notification 的使用
  4. [Ext JS 4] 实战之 ComboBox 和 DateField (消失之解决办法)
  5. mysql中group_concat函数_MySQL中group_concat函数
  6. 函数递归/二分法/列表,字典生成式/三元表达式/匿名函数/内置函数
  7. 【Matlab】建立最优控制LQR控制器模型
  8. C++设计模式 - 适配器模式(Adapter)
  9. 如何在vue3.0项目中集成Element-plus
  10. Tableau官方文档翻译(一):Measures和Dimensions的区别
  11. 如何在Windows平台用Java代码暴力破解WIFI密码
  12. 学习笔记之——Semi-direct Visual Odometry (SVO)
  13. 图像处理知多少?准大厂算法工程师30+场秋招后总结的面经问题详解
  14. 计算几何与图形学有关的几种常用算法
  15. 基于asp.net网上论坛BBS毕业设计
  16. 两台电脑共享上网(一台双网卡、一台单网卡)
  17. 从零开始学信号完整性(SIPI)--3 SI面临的挑战以及基于SI的设计方法
  18. 罗斯蒙特3051严格要求过程参数控制精度性能优异
  19. 虚拟运营商牌照即将发放
  20. 绿茶、红茶、茉莉花茶的简述分享

热门文章

  1. 基于Vue2.0+Vuex+Axios+NodeJs+Express+MySQL实现京东移动web商城
  2. MySQL高可用性分析
  3. Android开发 Facebook取得key-hashes
  4. 由一个DAOHelper类引发的思考
  5. jquery效果插件网址
  6. PingingLab传世经典系列《CCNA完全配置宝典》-2.9 OSPF基本配置
  7. 社团报名系统php,php85高校学生社团管理系统
  8. mtk android 编译环境,MTK android 快速编译方法.docx
  9. js 小数自动补0_JS自定义保留小数,并支持补零(四舍五入)
  10. php 判断时间超过5分钟_视频超过5分钟怎么在微信中进行发送