Java字符串操作和C#字符串操作的不同小结
作者:baidixing 发布时间:2022-02-15 07:21:14
前言
每种语言都会有字符串的操作,因为字符串是我们平常开发使用频率最高的一种类型。今天我们来聊一下Java的字符串操作及在某些具体方法中与C#的不同,对于需要熟悉多种语言的人来说,作为一种参考。进行诫勉
首先,什么是字符串?
字符串是字符的序列,是作为一种对象而存在。说的直白点,字符串就是一些字符的组合,从而构成字符串,例如“abc”就是字符串,"郭志奇"也是一种赐福穿。
我们知道,Java是一种面向对象的高级程序语言。所有事物均为对象,字符串也不例外,也是一种对象,其对应类型为String。
下面,我们分几种情况来进行说明字符串:
1、字符串的创建
2、字符串操作
字符串连接
字符串长度
字符串查找
获取指定索引的字符
去重空格
判断相等
大小写转换
字符串分隔
字符串比较
字符串创建
字符串必须先声明并进行初始化,才能使用,否则编译器会报出 变量未初始化错误。
请注意:Java中字符串定义的类型为String(第一个字母大写),对于C#程序员来说,看着不太舒服,因为c#中字符串定义为string (第一个字母小写),但C#中也是有String类的
创建字符串也分几种方式,可以根据需求灵活组织:
String(char a[])--Java代码
char a[] = { 'a', 'b', 'c' };
String source = new String(a);
System.out.println(source);//输出结果为abc
String(char a[],int offset,int length)--Java代码
char a[] = { 'a', 'b', 'c' };
String source = new String(a, 1, 2);
System.out.println(source);//输出为bc
字符串常量:
String source=“郭志奇”;
String source = "郭志奇";
String source1 = "郭志奇";
System.out.println(source == source1);// 输出true
System.out.println(source.equals(source1));// 输出true
此处简单提一下,Java中双等号== 表示的是引用是否相同,equals比较的是实际的字符串值。
对应的C#代码
string source = "郭志奇";
string source1 = "郭志奇";
Console.WriteLine(source==source1);//输出True
Console.WriteLine(source.Equals(source1));//输出True
Console.WriteLine(string.ReferenceEquals(source,source1));//输出True
Console.Read();
在C#中双等号以及equals比较的是实际的值,而refreshEquals比较的是引用是否相同。和Java略有不同。
字符串操作
字符串连接
通过加号+可以将两个字符串进行连接。请注意,字符串与其他类型连接,会自动调用其toString方法转换成字符串,然后进行拼接。
Java代码:
String source = "郭志奇";
String source2 = "郭语晨";
String source3 = source + source2;
System.out.println(source3);// 输出郭志奇郭语晨
String source4 = source + 521;// 字符串与数字拼接
System.out.println(source4);//输出郭志奇521
concat:字符串拼接
String source = "郭志奇";
String source2 = "郭语晨";
String source5 = source.concat(source2);
System.out.println(source5);// 输出郭志奇郭语晨
字符串长度
通过length()方法获取字符串长度。请注意:包含字符串中空格的长度。
Java代码:
String source = " 郭志奇 ";//前缀包含一个空格及一个tab 后缀包含一个空格
System.out.println(source.length());// 输出6
C#代码:
找茬:从C#输出的长度可以看到,Tab在Java中长度为1,而在C#长度为2. 英文tab
string source = " 郭志奇 ";
Console.WriteLine(source.Length);//输出7
字符串查找
两种字符串查找方法:
indexOf():从字符串开始位置进行查找
String source = "郭志奇";
System.out.println(source.indexOf("郭"));// 输出0
System.out.println(source.indexOf(""));// 输出0
lastIndexOf()方法:从字符串结束位置开始查找
String source = "郭志奇";
System.out.println(source.lastIndexOf("郭"));// 输出0
System.out.println(source.lastIndexOf(""));// 输出3
找茬:indexOf查找空字符串,返回值是0。lastIndexOf方法查找空格,返回值是3.等于字符串的长度。
查看lastIndexOf对应的C#代码实现:
string source = "郭志奇";
Console.WriteLine(source.Length);//输出3
Console.WriteLine(source.LastIndexOf(""));//输出2
Console.Read();
通过对比lastIndexOf查找空字符串,可以发现C#和Java的不同,Java返回的是字符串的长度,而C#返回的是字符串长度-1。个人认为C#的处理更符合目的。
获取指定索引的字符
通过charAt方法获取指定索引的字符
String source = "郭志奇";
System.out.println(source.charAt(0));//输出郭
System.out.println(source.charAt(source.length() - 1));//输出奇
为了学习,我们就要思考,假如我输入了负数或大于字符串长度的索引会出现什么呢?代码验证
String source = "郭志奇";
System.out.println(source.charAt(-1));
System.out.println(source.charAt(source.length() + 11));
没错,代码执行出错了,抛出异常:java.lang.StringIndexOutOfBoundsException
去重空格
通过trim方法移除字符串前后空格(包含tab)
String source = " 郭志奇 ";// 前后都有空格
String source1 = " 郭志奇 ";
System.out.println(source.length());
System.out.println(source.trim().length());
System.out.println(source1.length());
System.out.println(source1.trim().length());
令人遗憾的是,Java没有提供只清空前缀空格或后缀空格的方法。而C#却有。
判断相等
两种判断字符串相等的方法,双等号及equals、equalsIgnoreCase
通过代码来进行说明:
String source = new String("郭志奇A");
String source1 = new String("郭语晨");
String source2 = "郭志奇A";
String source3 = "郭语晨";
String source4 = "郭志奇a";
System.out.println(source == source2);// false
System.out.println(source.equals(source2));// true
System.out.println(source1 == source3);// false
System.out.println(source1.equals(source3));// true
System.out.println(source == source4);// false
System.out.println(source.equals(source4));// false
System.out.println(source.equalsIgnoreCase(source4));// true
双等号代表的是字符串引用是否相同,对于不同对象的字符串,双等号比较是不同的。
equals比较的是字符串的值,但区分大小写
equalsIgnoreCase:比较的是字符串的值,不区分大小写
进行字符串比较,尽量避免使用双等号。
大小写转换
toUpperCase转换成大写形式,toLowerCase转换成小写形式。但对于数字、空格则会忽略,不进行转换。比较简单
字符串分隔
通过split方法进行字符串分隔,split参数是分隔符,返回值是分割后的字符串数组。较简单。
字符串比较
通过compareTo方法进行字符串比较,
String source = "ab";
String source1 = "ba";
String source2 = "ab";
System.out.println(source.compareTo(source1));//返回值-1
System.out.println(source.compareTo(source2));//返回值0
System.out.println(source1.compareTo(source2));//返回值1
System.out.println(source.compareToIgnoreCase(source1));//返回值-1
System.out.println(source.compareToIgnoreCase(source2));//返回值0
System.out.println(source1.compareToIgnoreCase(source2));//返回值1
compareTo方法会逐个字符进行比较,如果源字符串比目标字符串大,那么返回正整数;如果源字符串与目标字符串相同,那么返回0;如果源字符串比目标字符串小,那么返回负数。
请注意:
1、返回值为0,那么字符串通过equals比较会相同
2、返回值正整数、负数,是源字符串不同的字符相减所得。
字符串使我们日常开发使用频率最高的类型,因此要数量掌握字符串的各种操作,以及一些坑点,才能在编码中轻松、愉快的避免各种bug的出现。
本次说明只介绍了字符串的冰山一角,对于更重要的字符串格式化,本次没有涉及,因为蛋蛋字符串格式化,就可以单独写一篇更长的博文才能说明。下次再聊。
来源:http://www.cnblogs.com/jiagoushi/p/10061787.html


猜你喜欢
- springboot logback动态获取application的配置项在多环境的情况下,logback的日志路径需要进行针对性配置,也就
- 首先下载newtonsoft.json,增加引用using newtonsoft.json.linq;把jobject的内容提取出来,job
- 前言对于正则表达式,相信很多人都知道,但是很多人的第一感觉就是难学,因为看第一眼时,觉得完全没有规律可寻,而且全是一堆各种各样的特殊符号,完
- 项目中需要webview重定向,但是由于一个webveiw里面有许多加载操作,因此在调用webview。goback()方法时,往往达不到我
- StreamAPI中的stream不能被重复消费,一旦它被使用,stream就被关闭了,别的地方再消费它就会抛IllegalStateExc
- 本文实例讲述了C#使用XML序列化操作菜单的方法。分享给大家供大家参考。具体分析如下:之前的一篇文章《C#递归读取XML菜单数据的方法》没使
- 第三篇来的好晚啊,上一篇说了如何向服务器推送信息,这一篇我们看看如
- 我们将会从以下的几点理解java线程的一些概念:线程的基本概念和优劣之处创建一个线程的两种方式线程的属性线程的状态synchronized可
- 在微服务中,需要我们在各个微服务中共享Session,使用Redis来共享Session是一个很好的解决方法,Redis是运行在内存中,查取
- 本文以一个简单实例讲述了C#实现自定义双击事件的方法,分享给大家供大家参考之用。具体方法如下:主要功能代码如下:public partial
- 本文实例为大家分享了Java实现学生管理系统的具体代码,供大家参考,具体内容如下package BookDemo_1; import jav
- 背景:用习惯了idea再去用eclipse实在用的不习惯,于是将老的eclipse项目导入到eclipse,网上有很多教程,看了很多博客都不
- 前言在实际开发当中,Spring中bean的属性直接赋值用的不是太多,整理这方面的资料,做一个小结,以备后续更深入的学习。通过配置文件的方式
- centos下搭建GitLab+Jenkins持续集成环境,供大家参考,具体内容如下1、安装JDKyum install -y java2、
- 为提供更高的数据保护 Android6.0版本上增加了关于Wifi和蓝牙的权限。蓝牙搜索到设备需要用到定位服务,所以在开发中 targetS
- 先看一下效果图实现思路:变成点的控件不是TextView和EditText而是Imageview。首先写一个RelativeLayout里边
- 本文实例为大家分享了convinientbanner顶部广告轮播控件的具体代码,供大家参考,具体内容如下gradle中添加compile &
- 用Canvas画贝塞尔曲线,要画贝塞尔曲线首先了解贝塞尔曲线:由于用计算机画图大部分时间是操作鼠标来掌握线条的路径,与手绘的感觉和效果有很大
- 如何实现?1.)首先实现全屏第一种:继承主题特定主题在Android API 19以上可以使用****.TranslucentDecor**
- namespace ConsoleApplication1{ using System; &n