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