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

首先,什么是字符串?

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

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

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

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

字符串创建

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

请注意: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略有不同。

字符串操作

  1. 字符串连接
    通过加号+可以将两个字符串进行连接。请注意,字符串与其他类型连接,会自动调用其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);// 输出郭志奇郭语晨
  2. 字符串长度
    通过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
  3. 字符串查找
    两种字符串查找方法:
    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#的处理更符合目的。

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

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

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

  7. 大小写转换
    toUpperCase转换成大写形式,toLowerCase转换成小写形式。但对于数字、空格则会忽略,不进行转换。比较简单
  8. 字符串分隔
    通过split方法进行字符串分隔,split参数是分隔符,返回值是分割后的字符串数组。较简单。
  9. 字符串比较
    通过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字符串操作及与C#字符串操作的不同的更多相关文章

  1. Java初学者笔记三:关于字符串和自实现数组常见操作以及异常处理

    一.字符串常见的操作 1.结合我在python中对于字符串常见处理总结出下面三个应该能算是字符串造作的TOP 3 //字符串查找子串,存在返回index,不存在返回-1 等于python的find: ...

  2. Java实验项目三——递归实现字符串查找和替换操作

    Program:按照下面要求实现字符串的操作: (1)设计一个提供下面字符串操作的类 1)编写一个方法,查找在一个字符串中指定字符串出现的次数. 2)编写一个方法,参数(母字符串,目标字符串,替换字符 ...

  3. Lesson12——NumPy 字符串函数之 Part1:字符串操作函数

    NumPy 教程目录 1 NumPy 字符串函数 以下函数用于对 dtype 为 numpy.string_ 或 numpy.unicode_ 的数组执行向量化字符串操作. 它们基于 Python 内 ...

  4. javascript中字符串常用操作总结、JS字符串操作大全

    字符串的操作在js中非常频繁,也非常重要.以往看完书之后都能记得非常清楚,但稍微隔一段时间不用,便会忘得差不多,记性不好是硬伤啊...今天就对字符串的一些常用操作做个整理,一者加深印象,二者方便今后温 ...

  5. IOS NS 字符串 数组 字典 文件 动态 静态 操作

    ios 常用字符串的操作   //将NSData转化为NSString        NSString* str = [[NSString alloc] initWithData:response e ...

  6. js--javascript中字符串常用操作总结、JS字符串操作大全

    字符串的操作在js中非常频繁,也非常重要.以往看完书之后都能记得非常清楚,但稍微隔一段时间不用,便会忘得差不多,记性不好是硬伤啊...今天就对字符串的一些常用操作做个整理,一者加深印象,二者方便今后温 ...

  7. C风格字符串和C++ string 对象赋值操作的性能比较

    <<C++ Primer>> 第四版 Exercise Section 4.3.1 部分Exercise 4.2.9 习题如下: 在自己本机执行如下程序,记录程序执行时间: # ...

  8. PHP操作redis之String(字符串)、List(列表)(一)

    Redis 简介 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. Redis 与其他 key – value 缓存产品有以下三个特点: Redis支持数据的持久 ...

  9. 【微软100题】定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。 如把字符串abcdef左旋转2位得到字符串cdefab。请实现字符串左旋转的函数。

    package test; /** * 定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部. 如把字符串abcdef左旋转2位得到字符串cdefab. 请实现字符串左旋转的函数. * ...

随机推荐

  1. 设计模式—桥接模式的C++实现

    这是Bwar在2009年写的设计模式C++实现,代码均可编译可运行,一直存在自己的电脑里,曾经在团队技术分享中分享过,现搬到线上来. 1. 装饰模式简述 1.1 目的 将抽象部分与它的实现部分分离,使 ...

  2. BurpSuit添加CA证书拦截HTTPS通信

    问题 BurpSuit 安装成功后可以直接使用代理对使用 HTTP 协议通信的会话进行拦截,但是对于使用 HTTPS 协议通信的会话进行代理使用时就会出现如下画面 例如访问百度主页: 原因 HTTPS ...

  3. DAC连接

    专用管理员连接是一种特殊的SQL Server服务器诊断性质的连接,用于在正常或者说标准连接形式无法连接SQL Server服务器的情况下连接到服务器进行服务器性能或者错误诊断.DAC同样支持安全加密 ...

  4. 自动化测试基础篇--Selenium浏览器操作

    摘自https://www.cnblogs.com/sanzangTst/p/7462056.html  学习 Selenium 主要提供的是操作页面上各种元素的方法,但它也提供了操作浏览器本身的方法 ...

  5. C#计算时间差 TimeSpan

    TimeSpan的相关属性 Add:与另一个TimeSpan值相加. Days:返回用天数计算的TimeSpan值. Duration:获取TimeSpan的绝对值. Hours:返回用小时计算的Ti ...

  6. windows chocolatey 修改默认安装软件默认安装路径

    管网解释 https://chocolatey.org/docs/features-install-directory-override 1.--install-directory=value    ...

  7. NSJSONSerialization 反序列化失败 NSCocoaErrorDomain Code=3840

    NSJSONSerialization 反序列化失败 NSCocoaErrorDomain Code=3840  NSCocoaErrorDomain Code=3840 “No string key ...

  8. Ubuntu下永久修改主机名和创建用户

    使用hostname 进行修改. 创建用户,修改密码

  9. February 11th, 2018 Week 7th Sunday

    Grasp all, lose all. 欲尽得,必尽失. Not to be greedy and not to try to get everything. Our time, energy an ...

  10. update layer tree导致页面卡顿

    前因 今天检查一个vue页面问题,就是在切换Tab时候(某些win10电脑),页面会卡顿一段很长的时间,短则3秒,长则十几秒,这个体验非常糟糕,于是我着手寻找其中原因. 概况 这个vue页面的元素非常 ...