热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

在JAVA语言中,字符串数据实际上由String类所实现的。下面这篇文章主要给大家介绍了关于Java字符串操作和C#字符串操作的不同的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

前言

每种语言都会有字符串的操作,因为字符串是我们平常开发使用频率最高的一种类型。今天我们来聊一下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的出现。

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

总结

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


推荐阅读
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • 本文是一位90后程序员分享的职业发展经验,从年薪3w到30w的薪资增长过程。文章回顾了自己的青春时光,包括与朋友一起玩DOTA的回忆,并附上了一段纪念DOTA青春的视频链接。作者还提到了一些与程序员相关的名词和团队,如Pis、蛛丝马迹、B神、LGD、EHOME等。通过分享自己的经验,作者希望能够给其他程序员提供一些职业发展的思路和启示。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了Python版Protobuf的安装和使用方法,包括版本选择、编译配置、示例代码等内容。通过学习本教程,您将了解如何在Python中使用Protobuf进行数据序列化和反序列化操作,以及相关的注意事项和技巧。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 本文介绍了2019年上半年内蒙古计算机软考考试的报名通知和考试时间。考试报名时间为3月1日至3月23日,考试时间为2019年5月25日。考试分为高级、中级和初级三个级别,涵盖了多个专业资格。报名采取网上报名和网上缴费的方式进行,报考人员可登录内蒙古人事考试信息网进行报名。详细内容请点击查看。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 从零学Java(10)之方法详解,喷打野你真的没我6!
    本文介绍了从零学Java系列中的第10篇文章,详解了Java中的方法。同时讨论了打野过程中喷打野的影响,以及金色打野刀对经济的增加和线上队友经济的影响。指出喷打野会导致线上经济的消减和影响队伍的团结。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • 本文介绍了程序员最美的情人节礼物,即使用JS渲染的3D玫瑰,通过在QQ空间和人人网上分享这个特殊的礼物,可以给情人带来惊喜和喜悦。 ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • 本文介绍了一种处理AJAX操作授权过期的全局方式,以解决Asp.net MVC中Session过期异常的问题。同时还介绍了基于WebImage的图片上传工具类。详细内容请参考链接:https://www.cnblogs.com/starluck/p/8284949.html ... [详细]
  • 本文介绍了在Mac上安装Xamarin并使用Windows上的VS开发iOS app的方法,包括所需的安装环境和软件,以及使用Xamarin.iOS进行开发的步骤。通过这种方法,即使没有Mac或者安装苹果系统,程序员们也能轻松开发iOS app。 ... [详细]
author-avatar
臻艾龙522_292
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有