好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Java字符串操作和C#字符串操作的不同小结

前言

每种语言都会有 字符串 的操作,因为字符串是我们平常开发使用频率最高的一种类型。今天我们来聊一下java的字符串操作及在某些具体方法中与c#的不同,对于需要熟悉多种语言的人来说,作为一种参考。进行诫勉

首先,什么是字符串?

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

我们知道,java是一种面向对象的高级程序语言。所有事物均为对象,字符串也不例外,也是一种对象,其对应类型为string。

下面,我们分几种情况来进行说明字符串:

1、字符串的创建

2、字符串操作

字符串连接 字符串长度 字符串查找 获取指定索引的字符 去重空格 判断相等 大小写转换 字符串分隔 字符串比较

字符串创建

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

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

创建字符串也分几种方式,可以根据需求灵活组织:

string(char a[])--java代码

?

1

2

3

char a[] = { 'a' , 'b' , 'c' };

string source = new string(a);

system.out.println(source); //输出结果为abc

string(char a[],int offset,int length)--java代码

?

1

2

3

char a[] = { 'a' , 'b' , 'c' };

string source = new string(a, 1 , 2 );

system.out.println(source); //输出为bc

字符串常量:

string source=[郭志奇];

?

1

2

3

4

string source = "郭志奇" ;

string source1 = "郭志奇" ;

system.out.println(source == source1); // 输出true

system.out.println(source.equals(source1)); // 输出true

此处简单提一下,java中双等号== 表示的是引用是否相同,equals比较的是实际的字符串值。

对应的c#代码

?

1

2

3

4

5

6

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代码:

?

1

2

3

4

5

6

string source = "郭志奇" ;

string source2 = "郭语晨" ;

string source3 = source + source2;

system.out.println(source3); // 输出郭志奇郭语晨

string source4 = source + 521 ; // 字符串与数字拼接

system.out.println(source4); //输出郭志奇521

concat:字符串拼接

?

1

2

3

4

string source = "郭志奇" ;

string source2 = "郭语晨" ;

string source5 = source.concat(source2);

system.out.println(source5); // 输出郭志奇郭语晨

字符串长度

通过length()方法获取字符串长度。请注意:包含字符串中空格的长度。
java代码:

?

1

2

string source = "  郭志奇 " ; //前缀包含一个空格及一个tab 后缀包含一个空格

system.out.println(source.length()); // 输出6

c#代码:

找茬:从c#输出的长度可以看到,tab在java中长度为1,而在c#长度为2. 英文tab

?

1

2

string source = " 郭志奇 " ;

console.writeline(source.length); //输出7

字符串查找

两种字符串查找方法:

indexof():从字符串开始位置进行查找

?

1

2

3

string source = "郭志奇" ;

system.out.println(source.indexof( "郭" )); // 输出0

system.out.println(source.indexof( "" )); // 输出0

lastindexof()方法:从字符串结束位置开始查找

?

1

2

3

string source = "郭志奇" ;

system.out.println(source.lastindexof( "郭" )); // 输出0

system.out.println(source.lastindexof( "" )); // 输出3

找茬:indexof查找空字符串,返回值是0。lastindexof方法查找空格,返回值是3.等于字符串的长度。

查看lastindexof对应的c#代码实现:

?

1

2

3

4

string source = "郭志奇" ;

console.writeline(source.length); //输出3

console.writeline(source.lastindexof( "" )); //输出2

console.read();

通过对比lastindexof查找空字符串,可以发现c#和java的不同,java返回的是字符串的长度,而c#返回的是字符串长度-1。个人认为c#的处理更符合目的。

获取指定索引的字符

通过charat方法获取指定索引的字符

?

1

2

3

string source = "郭志奇" ;

system.out.println(source.charat( 0 )); //输出郭

system.out.println(source.charat(source.length() - 1 )); //输出奇

为了学习,我们就要思考,假如我输入了负数或大于字符串长度的索引会出现什么呢?代码验证

?

1

2

3

string source = "郭志奇" ;

system.out.println(source.charat(- 1 ));

system.out.println(source.charat(source.length() + 11 ));

没错,代码执行出错了,抛出异常:java.lang.stringindexoutofboundsexception

去重空格

通过trim方法移除字符串前后空格(包含tab)

?

1

2

3

4

5

6

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

通过代码来进行说明:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

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方法进行字符串比较,

?

1

2

3

4

5

6

7

8

9

10

string source = "ab" ;

string source1 = "ba" ;

string source2 = "ab" ;

system.out.println(source测试数据pareto(source1)); //返回值-1

system.out.println(source测试数据pareto(source2)); //返回值0

system.out.println(source1测试数据pareto(source2)); //返回值1

 

system.out.println(source测试数据paretoignorecase(source1)); //返回值-1

system.out.println(source测试数据paretoignorecase(source2)); //返回值0

system.out.println(source1测试数据paretoignorecase(source2)); //返回值1

compareto方法会逐个字符进行比较,如果源字符串比目标字符串大,那么返回正整数;如果源字符串与目标字符串相同,那么返回0;如果源字符串比目标字符串小,那么返回负数。

请注意:

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

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

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

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

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。

原文链接:http://HdhCmsTestcnblogs测试数据/jiagoushi/p/10061787.html

查看更多关于Java字符串操作和C#字符串操作的不同小结的详细内容...

  阅读:15次