一、连接字符串

  1、连接多个字符串

    使用“+”运算符可以实现连接多个字符串的功能。“+” 运算符可以连接多个运算符并产生一个 String 对象。

  2、连接其他数据类型

    字符串与其他基本数据类型进行连接,会将这些数据直接转换成字符串。

  3、public String concat(String str)

    将指定的字符串连接到该字符串的末尾。

   Demo:

 public static void main(String[] args) {
String str1 = "Hello";
String str2 = "Java"; // 使用"+" 运算符连接
System.out.println(str1+" "+str2); // Hello Java int booktime = 4;
double practice = 4.5;
// 连接不同数据类型的字符串
System.out.println("我每天花费"+booktime+"小时看书,"+practice+"小时练习"); // 我每天花费4小时看书,4.5小时练习 // concat:将字符串连接到该字符串尾部。
System.out.println(str1.concat(" World")); // Hello World }

二、字符串的比较

  1、==:比较对象的地址

    只有两个字符串的常量对象比较时才会返回 true,其他的都是 false。

  2、public boolean equals( Object anObject)

    此方法将此字符串与指定对象进行比较,严格区分大小写。因为 String 类型重写了 Object的 equals。

  3、public boolean equalsIgnorCase(String anOtherString)

       将此字符串与指定字符串对象比较,忽略大小写。

    Demo:

 public static void main(String[] args) {

 // 创建字符串对象
String s1 = "hello";
String s2 = "hello";
String s3 = "HELLO"; // boolean equals(Object obj):比较字符串的内容是否相同
System.out.println(s1.equals(s2)); // true
System.out.println(s1.equals(s3)); // false //boolean equalsIgnoreCase(String str):比较字符串的内容是否相同,忽略大小写
System.out.println(s1.equalsIgnoreCase(s2)); // true
System.out.println(s1.equalsIgnoreCase(s3)); // true }

        注意:

      a、== 是进行对象的地址值比较,比较字符串的内容用 equal 方法。

      b、在使用 equal 的时候,如果比较双方一个常量一个变量,推荐把常量字符串写在前面,因为一旦变量为 null ,会报空指针异常。

    扩展:Object 是” 对象”的意思,也是一种引用类型。作为参数类型,表示任意对象都可以传递到方法中

   4、大小比较

    String 类型实现了 Comparable 接口,重写了 compareTo 方法,严格区分大小写,会依次比较对应位置的字符。

    如:hello和Hello,先[0]位置的h和H,h>H,就直接认定为hello>Hello

           hello和hella,先[0][1][2][3]比较,都一样,最后到[4]o>a,认定hello>hella

      hello和helloworld,发现前面都一样,长的大

  5、大小比较:不区分大小写

    String 类提供了一个方法 compareToIgnoreCase,可以忽略大小写比较

  6、按照每个国家的语言校对顺序

    java.text.Collator:Collator 类执行区分语言环境的 String 比较。使用此类可为自然语言文本构建搜索和排序例程。

    Collator实现了Comparator接口 ,Collator是抽象类,不能直接创建对象,它有一个直接子类RuleBasedCollator。

    Collator内部提供了一个静态方法,可以获取一个它的子类对象。

    Demo:

   @Test
public void test1(){
String[] arr = {"张三","李四","王五","赵六","钱七"};
//希望按照拼音顺序,字典顺序
Arrays.sort(arr, Collator.getInstance());//默认语言环境,因为现在的操作系统的平台是中文win
System.out.println(Arrays.toString(arr));
}   @Test
public void test2(){
String[] arr = {"张三","李四","王五","赵六","钱七"};
//希望按照拼音顺序,字典顺序
Arrays.sort(arr, Collator.getInstance(Locale.CHINA));//Locale.CHINA指定语言环境
System.out.println(Arrays.toString(arr));
}

三、获取字符串长度与查找的方法

  1、public int length()

    返回此字符串的长度,因为String的内部(JDK1.9之前)用char[]实现,这个长度就是value数组的长度。

  2、public int indexof(String str)

    返回指定子字符串第一次出现在该字符串内的索引,如果没有检索到,返回 -1。

  3、public int lastIndexof(String str)

    返回指定子字符串在此字符串中最后一次出现处的索引位置,如果没有检索到,返回 -1。

  4、public boolean contains(CharSequence str)

     当且仅当此字符串包含指定的 char 值序列时,返回 true。

   Demo:

 public static void main(String[] args) {
String s = "Hello World"; // int length :获取字符串的长度,其实也就是字符个数
System.out.println(s.length()); // 11 //char charAt(int index) 获取指定索引处的字符
System.out.println(s.charAt(0)); // H //int indexOf(String str):获取str在字符串对象中第一次出现的索引,没有返回‐1
System.out.println(s.indexOf("o")); // 4 //int lastIndexOf(String str):获取str在字符串对象中最后一次出现的索引,没有返回‐1
System.out.println(s.lastIndexOf("rl")); // 8 //boolean contains(String str):查看指定的字符串是否在该字符串中,存在为true,不存在为 false
System.out.println(s.contains("Wo")); // true
}

四、与 char 相关

  1、char[] toCharArray()

       将此字符串转换为新的字符数组。

  2、char charAt(index)

      返回指定索引处的 char 值

  3、String(char[] arr)

     通过一个 char数组构建一个字符串对象

  4、String(char[] arr, int offset, int count)

       通过一个 char 数组,截取其中的一端,构建一个字符串对象

五、与 Byte 相关(和编码与解码相关)

  1、byte[] getBytes() 编码方法

byte[] getBytes():编码的方法,使用平台默认的字符编码进行编码

byte[] getBytes(编码方式):使用指定的编码格式进行编码

    编码:对于ASCII码范围内(0~127),无论用什么编码方式,结果都是一样的,一个字符对应一个字节的编码值

          对于其他的字符,编码,结果不一定是几个字节,例如汉字:

          UTF-8:变长的,但是大多数汉字都是3个字节

        GBK、GB2312:固定2个字节

        ISO8859-1:不支持中文,所有字符都变为1个字节

    Demo:

 @Test
public void test01(){
String str = "abc";
byte[] bytes = str.getBytes();
System.out.println(Arrays.toString(bytes));//[97, 98, 99]
} @Test
public void test02() throws UnsupportedEncodingException{
String str = "你好,世界";
byte[] bytes = str.getBytes("GBK");
System.out.println(Arrays.toString(bytes)); String string = new String(bytes,"GBK");
System.out.println(string);
}

  2、new String() 解码方法

new String(字节数组)

new String(字节数组,编码方式)

  扩展:产生乱码原因:

    (1)编码与解码字符集不一致

    (2)缺字节,如使用ISO8859-1编码不支持中文,就会造成缺字节现象。

四、转换功能的方法

  1、public String toLowerCase()

      使用默认语言环境的规则将此 String 中的所有字符都转换为小写。

  2、public String toUpperCase()

     使用默认语言环境的规则将此 String 中的所有字符都转换为大写。

   Demo:

 public static void main(String[] args) {
String str = "abcdefg"; // char[] toCharArray():把字符串转换位字符数组
char[] chars = str.toCharArray();
System.out.println(Arrays.toString(chars)); // [a, b, c, d, e, f, g] // byte[] getBytes():把字符串转换为字节数组
byte[] bytes = str.getBytes();
System.out.println(Arrays.toString(bytes)); // [97, 98, 99, 100, 101, 102, 103] String str2 = "iT,i Love You"; // String replace(old str,new str):把匹配的原来的字符串用新的字符串替换掉
String replace = str2.replace("i", "I");
System.out.println(replace); // IT,I Love You //String toLowerCase():将此 String 中的所有字符都转换为小写。
System.out.println(str2.toLowerCase()); // it,i love you //String toUpperCase():将此 String 中的所有字符都转换为大写。
System.out.println(str2.toUpperCase()); // IT,I LOVE YOU }

     扩展:CharSequence 是一个接口,也是一种引用类型。作为参数类型,可以把String对象传递到方法中。

五、截取分割字符串的方法

  1、public String subString(int beginIndex)

    返回一个子字符串,从beginIndex开始截取字符串到字符串结尾。

  2、public String subString(int beginIndex,int endIndex)

    返回一个子字符串,从beginIndex到endIndex截取字符串。含beginIndex,不含endIndex。(左闭右开区间)

六、拆分

  1、public String split(String regex)

     将此字符串按照给定的regex(规则,可以是正则表达式)拆分为字符串数组。

    注意:如果按照英文句点“.”进行切分,必须写"\\."(两个反斜杠)

   Demo:

 public static void main(String[] args) {
String str = "aa|bb|cc|dd|ee"; //String subString(int start):从start开始截取字符串到字符串结尾
System.out.println(str.substring(6)); // cc|dd|ee //String subString(int start,int end):从start到end截取字符串。含start,不含end。
System.out.println(str.substring(2,8)); // |bb|cc //String split(string regex):按照给定的regex(规则)拆分为字符串数组。
String[] split = str.split("|"); System.out.println(Arrays.toString(split)); //[a, a, |, b, b, |, c, c, |, d, d, |, e, e] }

七、匹配方法

  1、boolean matches(正则表达式)

    用于校验某个字符串是否符合XXX的规则

    Demo:

 public void test2(){
String str = "12a345";
//简单判断是否全部是数字,这个数字可以是1~n位 //正则不是Java的语法,它是独立与Java的规则
//在正则中\是表示转义,
//同时在Java中\也是转义
boolean flag = str.matches("\\d+");
System.out.println(flag);
}

八、替换

  1、String replace(target, value)

    将与target匹配的字符串使用value字符串替换。(如果没有可以匹配的字符,将原字符串返回)不支持正则表达式。

  2、String replaceAll(String regex, String replacement)

    使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。

  3、String replaceFirst(String regex, String replacement)

    用给定的 replacement 替换此字符串匹配给定的正则表达式的第一个子字符串。

九、其他方法

  1、public String trim()

        返回字符串的副本,忽略前导空白和尾部空白。

  2、boolean isEmpty()

    是否是空字符串

  2、public boolean startsWith(String prefix)

    测试此字符串是否以指定的前缀开始。

  3、public boolean endsWidth(String suffix)

     测试此字符串是否以指定的后缀结束。

  4、public int campareTo()

     按字典顺序比较两个字符串。

  5、public int compareToIgnoreCase()

    按字典顺序比较两个字符串,忽略大小写。

    注意:该比较基于字符串中各个字符的 Unicode 值,按字典顺序将此 String对象表示的字符序列与参数字符串所表示的字符序列进行比较。

       如果按字典顺序此 String 对象位于参数字符串之前,则比较结果为一个负整数;如果按字典顺序此 String 对象位于参数字符串之后,则比较结果为一个正整数;如果这两个字符串相等,则结果为 0。

    Demo:

  public static void main(String[] args) {
String str = " Hello World "; //String trim():忽略字符串前导空白和尾部空白。
System.out.println(str.trim()); // Hello World // boolean startswith测试此字符串是否以指定的前缀开始。
System.out.println(str.startsWith(" He")); // true
System.out.println(str.startsWith("he")); // false // boolean endswith测试此字符串是否以指定的后缀结束。
System.out.println(str.endsWith("ld ")); // true
System.out.println(str.endsWith("ll")); // false //
String str2 = "hello java";
//compareTo()字典顺序比较两个字符串。
System.out.println(str2.compareTo(str)); // 72
// compartToIgnoreCase()字典顺序比较两个字符串,忽略大小写
System.out.println(str2.compareToIgnoreCase(str)); //
}

  

Java 字符串(二)字符串常用操作的更多相关文章

  1. python字符串、元组常用操作

    常用字符串操作函数: #Author:CGQ name="I \tam ChenGuoQiang" print(name.capitalize())#首字母大写,其他都小写 pri ...

  2. Python中字符串有哪些常用操作?纯干货超详细

  3. 读Hadoop3.2源码,深入了解java调用HDFS的常用操作和HDFS原理

    本文将通过一个演示工程来快速上手java调用HDFS的常见操作.接下来以创建文件为例,通过阅读HDFS的源码,一步步展开HDFS相关原理.理论知识的说明. 说明:本文档基于最新版本Hadoop3.2. ...

  4. .Net Excel操作之NPOI(二)常用操作封装

    一.Excel数据导出常用操作 1.指定表头和描述 2.指定数据库中读出的数据集合 二.ExcelExport封装 /// <summary> /// Excel常用的表格导出逻辑封装 / ...

  5. java集成开发环境常用操作集

    1.简单搭建maven集成开发环境 一.     Jetty安装 下载地址(包涵windows和Linux各版本,Jetty9需要JDK7):http://download.eclipse.org/j ...

  6. java:Cookie(常用操作),Cookie和Session免登录实例

     1.常用操作: package cn.zzsxt.lee.web.cookie; import java.io.IOException; import javax.servlet.ServletEx ...

  7. C++字符串string类常用操作详解(一)【初始化、遍历、连接】

    代码示例: #include <iostream> #include "string" using namespace std; //字符串初始化 void strIn ...

  8. Activiti工作流(二)之常用操作

    前面介绍了Activiti工作流的基本操作,但是在实际应用过程中,往往不满足项目需求,因此还需要了解一些其他的功能比如:连线.排他网关.并行网管.流程变量.个人任务及组任务的三种发布方式. 下面将介绍 ...

  9. java基础之数组常用操作

    常用的对数组进行的操作 1.求数组中最大值,最小值 思路:假设下标为0的元素是最大值,遍历数组,依次跟max进行比较,如果有元素比这个max还大,则把这个值赋给max.最小值同样 public cla ...

  10. Java进阶(二)文件读操作

    本文以实际的读取文件为例子,介绍流的概念,以及输入流的基本使用. 按照前面介绍的知识,将文件中的数据读入程序,是将程序外部的数据传入程序中,应该使用输入流--InputStream或Reader.而由 ...

随机推荐

  1. java任务调度之Timer定时器

    定时器相信大家都不陌生,平时使用定时器就像使用闹钟一样,我们可以在固定的时间做某件事,也可以在固定的时间段重复做某件事,今天就来分析一下java中自带的定时任务器Timer. 一.Timer基本使用 ...

  2. Linux系统中python默认版本为python2.7,修改为python3 项目上传码云

    # 查询系统本系统中安装的python版本 ls -l /usr/bin/python* 1.在虚拟机上新建虚拟环境 # 系统中python默认版本为python2.,可以将其修改为python3 # ...

  3. 【斜率优化】【P5468】 [NOI2019]回家路线

    Description 给定 \(n\) 点,这 \(n\) 个点由 \(m\) 班列车穿插连结.对于第 \(i\) 班列车,会在 \(p_i\) 时刻从 \(x_i\) 站点出发开向 \(y_i\) ...

  4. 【LG3647】[APIO2014]连珠线

    [LG3647][APIO2014]连珠线 题面 洛谷 题解 首先考虑一下蓝线连起来的情况,一定是儿子-父亲-另一个儿子或者是儿子-父亲-父亲的父亲. 而因为一开始只有一个点在当前局面上,将一条红边变 ...

  5. Spring Boot 知识笔记(热部署)

    热部署原理: 使用了两个ClassLoader,一个Classloader加载那些不会改变的类(第三方Jar包),另一个ClassLoader加载会更改的类,称为restart ClassLoader ...

  6. 【IntelliJ IDEA学习之四】IntelliJ IDEA常用插件

    版本:IntelliJIDEA2018.1.4 一.代码规范Alibaba Java Coding Guidelines:阿里巴巴代码规范检查插件FindBugs-IDEA:潜在 Bug 检查Sona ...

  7. VS2019 NetCore3.0找寻grpc模板

    今天研究Google的grpc框架的时候看到了https://www.cnblogs.com/yilezhu/p/10631420.html这哥们儿的博客 按照博客的内容找寻grpc模板,始终找不到A ...

  8. 《Linux就该这么学》自学笔记_ch21_使用Git分布式版本控制系统

    <Linux就该这么学>自学笔记_ch21_使用Git分布式版本控制系统 文章主要内容: 分布式版本控制系统 使用Git服务程序 提交数据 移除数据 移动数据 历史记录 还原数据 管理标签 ...

  9. volatile 和 内存屏障

    接下来看看volatile是如何解决上面两个问题的: 被volatile修饰的变量在编译成字节码文件时会多个lock指令,该指令在执行过程中会生成相应的内存屏障,以此来解决可见性跟重排序的问题. 内存 ...

  10. pod install 的历程

    公司项目拉下来执行有报错,建议执行pod install.这个是IOS的xcode第一次用的时候是需要的步骤 1.首先对于pod的命令你想执行,需要安装CocoaPods OS X 10.11以前,在 ...