Java字符串操做及与C#字符串操做的不一样

每种语言都会有字符串的操做,由于字符串是咱们日常开发使用频率最高的一种类型。今天咱们来聊一下Java的字符串操做及在某些具体方法中与C#的不一样,对于须要熟悉多种语言的人来讲,做为一种参考。进行诫勉java

首先,什么是字符串?程序员

字符串是字符的序列,是做为一种对象而存在。说的直白点,字符串就是一些字符的组合,从而构成字符串,例如“abc”就是字符串,"郭志奇"也是一种赐福穿。c#

咱们知道,Java是一种面向对象的高级程序语言。全部事物均为对象,字符串也不例外,也是一种对象,其对应类型为String。数组

下面,咱们分几种状况来进行说明字符串:学习

  1. 字符串的建立
  2. 字符串操做
    1. 字符串链接
    2. 字符串长度
    3. 字符串查找
    4. 获取指定索引的字符
    5. 去重空格
    6. 判断相等
    7. 大小写转换
    8. 字符串分隔
    9. 字符串比较

字符串建立编码

字符串必须先声明并进行初始化,才能使用,不然编译器会报出 变量未初始化错误。spa

请注意:Java中字符串定义的类型为String(第一个字母大写),对于C#程序员来讲,看着不太舒服,由于c#中字符串定义为string (第一个字母小写),但C#中也是有String类的code

建立字符串也分几种方式,能够根据需求灵活组织:对象

String(char a[])--Java代码 blog

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略有不一样。

 

字符串操做

  1. 字符串链接
    经过加号+能够将两个字符串进行链接。请注意,字符串与其余类型链接,会自动调用其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);// 输出郭志奇郭语晨

     

  2. 字符串长度
    经过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

     

  3. 字符串查找
    两种字符串查找方法:
    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#的处理更符合目的。

  4. 获取指定索引的字符
    经过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

  5. 去重空格
    经过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#却有。

  6. 判断相等
    两种判断字符串相等的方法,双等号及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:比较的是字符串的值,不区分大小写
    进行字符串比较,尽可能避免使用双等号。

  7. 大小写转换
    toUpperCase转换成大写形式,toLowerCase转换成小写形式。但对于数字、空格则会忽略,不进行转换。比较简单
  8. 字符串分隔
    经过split方法进行字符串分隔,split参数是分隔符,返回值是分割后的字符串数组。较简单。
  9. 字符串比较
    经过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;若是源字符串比目标字符串小,那么返回负数。

请注意:

一、返回值为0,那么字符串经过equals比较会相同

二、返回值正整数、负数,是源字符串不一样的字符相减所得。

字符串使咱们平常开发使用频率最高的类型,所以要数量掌握字符串的各类操做,以及一些坑点,才能在编码中轻松、愉快的避免各类bug的出现。

本次说明只介绍了字符串的冰山一角,对于更重要的字符串格式化,本次没有涉及,由于蛋蛋字符串格式化,就能够单独写一篇更长的博文才能说明。下次再聊。

相关文章
相关标签/搜索