每种语言都会有字符串的操作,因为字符串是我们平常开发使用频率最高的一种类型。今天我们来聊一下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. matlab练习程序(点云下采样)

    点云处理有时因为数据量太大,我们需要对其进行下采样. 这里的方法是先将点云填入固定大小的三维网格中,然后每个网格中选一个点生成新的点云. 新点云即为下采样后的点云. 这里使用斯坦福兔子作为测试点云. ...

  2. oracle 压力测试工具benchmarksql

    TPC-C测试 TPC-C 于 1992 年 7 月 23 日认可为新的基准测试.TPC(Transaction Processing Performance Council,事务处理性能委员会)-C ...

  3. Latch导致MySQL Crash

    作者:沃趣科技数据库专家 董红禹 问题概述 最近我们遇到一个MySQL的问题,分析后很有代表意义,特地写出来供大家参考.出现问题是,数据库先是被置为只读,然后过了一段时间,MySQL直接Crash掉了 ...

  4. c 指针函数 vs 函数指针

    指针函数,函数指针 #include <stdio.h> int max(int a, int b){ return a > b ? a : b; } //函数指针,2个int参数, ...

  5. python3爬虫抓取智联招聘职位信息代码

    上代码,有问题欢迎留言指出. # -*- coding: utf-8 -*- """ Created on Tue Aug 7 20:41:09 2018 @author ...

  6. ASP.NET -- WebForm -- .aspx与.aspx.cs文件

    ASP.NET -- WebForm --  .aspx与.aspx.cs文件 1. ASP.NET -- WebForm(C#)文件 .aspx文件:是Html页面,页面的布局,样式在该文件中设计. ...

  7. Shell编程基础知识(一)

    一.基本的运行Linux程序的3种方法: (1) 使文件具有可执行权限,直接运行文件.eg:  chmod a+x testfile.sh   ./testfile.sh (2) 直接调用命令解释器来 ...

  8. 你可能不知道的printf

    前言 printf可能是我们在学习C语言的过程中最早接触的库函数了.其基本使用想必我们都已经非常清楚了.但是下面的这些情况你是否已经清楚地知道了呢? 示例程序 我们来看一个示例程序,看看你能否对下面的 ...

  9. JAVA 容易忽略的东西

    Java中的取余会出现负数.用Math.floorMod()方法可以掰正,但是也仅限被除数是负数的情况,如果除数是负数,这个没用. 和C不一样,Java中的字符串是不可变字符串,不能修改Java字符串 ...

  10. 关于LVS负载均衡tcp长连接分发的解决思路

    虽然应用keepalived搞定了后端服务负载均衡和高可用性问题,但是在具体应用的时候,还是要注意很多问题.很多应用都用tcp或者http的长连接,因为建立tcp连接或者http连接开销比较大,而应用 ...