我在上海乐字节学习Java的第十九天(持续更新中)

HUIYL1 2020-11-11 10:33:39
java 学习 上海 字节 在上


Java字符串

在Java中,字符串被作为 String 类型的对象处理

String常用方法简介

创建 String 对象的方法

String s1= “com”; 创建一个字符串对象com,名为s1
String s2=new String; 创建一个空字符串对象,名为s2
String s3=new String(“com”); 创建一个字符串对象com,名为s3

在这里插入图片描述

int length()、charAt(int index)、String substring(int beginIndex)、String substring(int beginIndex, int endIndex)

在这里插入图片描述

package com.SH.comProj;

public class StringDemo1 {

public static void main(String[] args) {

//定义一个字符串"JAVA 编程 基础"

String str="JAVA 编程 基础";

//打印输出字符串的长度

System.out.println("字符串的长度是:"+str.length());

        //charAt(int index)

//取出字符'程'并输出

System.out.println(str.charAt(6));

//取出子串"编程 基础"并输出

System.out.println(str.substring(5));

//取出子串"编程"并输出

System.out.println(str.substring(5, 7));

}

}

int indexOf(int ch)、int indexOf(String str)、int lastIndexOf(String str)、int lastIndexOf(String str, formIndex)

package com.SH.comProj;

public class StringDemo2 {

public static void main(String[] args) {

// 定义一个字符串"JAVA编程基础,我喜欢java编程"

String str=new String("JAVA编程基础,我喜欢java编程");

//查找字符'A'在字符串中第一次出现的位置

System.out.println("字符'A'在字符串中第一次出现的位置"+str.indexOf('A'));

//查找子串"编程"在字符串中第一次出现的位置

System.out.println("子串"编程"在字符串中第一次出现的位置"+str.indexOf("编程"));

//查找字符'A'在字符串中最后一次出现的位置

System.out.println("字符'A'在字符串中最后一次出现的位置"+str.lastIndexOf('A'));

//查找子串"编程"在字符串中最后一次出现的位置

System.out.println("子串"编程"在字符串中最后一次出现的位置"+str.lastIndexOf("编程"));

//在字符串index值为8的位置开始,查找子串"编程"第一次出现的位置

System.out.println("在字符串index值为8的位置开始,查找子串"编程"第一次出现的位置"+str.indexOf("编程", 8));

}

}

byte[] arrs=str.getBytes();

  • 字符串和byte数组间的相互转换
  • 编码问题:GBK编码和UTF-8编码
package com.SH.comProj;

import java.io.UnsupportedEncodingException;

public class StringDemo3 {

public static void main(String[] args) throws UnsupportedEncodingException {

// 字符串和byte数组之间的相互转换

//定义一个字符串

String str=new String("JAVA 编程 基础");

//将字符串转换为byte数组,并打印输出

byte[] arrs=str.getBytes("GBK");

for(int i=0;i<arrs.length;i++){

System.out.print(arrs[i]+" ");

}

System.out.println();

//将byte数组转换为字符串

String str1=new String(arrs,"GBK");

System.out.println(str1);

}

}

== 和 equals 的区别(地址和内容)

内存中的存储位置

在这里插入图片描述

package com.SH.comProj;

public class StringDemo5 {

public static void main(String[] args) {

// == 和equals方法的区别

//定义三个字符串,内容都是com

String str1="imooc";

String str2="imooc";

String str3=new String("imooc");

System.out.println("str1和str2的内容相同?"+(str1.equals(str2)));

System.out.println("str1和str3的内容相同?"+(str1.equals(str3)));

System.out.println("str1和str2的地址相同?"+(str1==str2));

System.out.println("str1和str3的地址相同?"+(str1==str3));

}

}

String的不可变性

  • String对象一旦被创建,则不能修改,是不可变的
  • 所谓的修改其实是创建了新的对象,所指向的内存空间不变
package com.SH.comProj;

public class StringDemo6 {

public static void main(String[] args) {

//String的不可变性

//String对象一旦被创建,则不能修改,是不可变的

//所谓的修改其实是创建了新的对象,所指向的内存空间不变

String s1="com";

String s2="hello,"+s1;

//s1不再指向com所在的内存空间,而是指向了"hello,com"

System.out.println("s1="+s1);

System.out.println("s2="+s2);

String s3=new String("hello,com!");

System.out.println("子串:"+s3.substring(0,5));

System.out.println("s3="+s3);

}

}

字符串StringBuilder

  • String 和 StringBuilder 的区别:
    – String 具有不可变性,而StringBuilder不具备
    – StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象

三者的区别:

  • String:不可变字符串;
  • StringBuffer:可变字符串、效率低、线程安全
  • StringBuilder:可变字符序列、效率高、线程不安全;
  • 建议:
    –当频繁操作字符串时,使用StringBuilder

StringBuilder 和 StringBuffer

  • 二者基本相似
  • StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)
  • 由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类
  • StringBuffer 是线程安全的,StringBuilder 则没有
  • 在执行速度方面的比较:StringBuilder > StringBuffer

API文档

在这里插入图片描述

StringBuilder类的常用方法

在这里插入图片描述

package com.SH.comProj;

public class StringBuilderDemo1 {

public static void main(String[] args) {

// 定义一个字符串"你好"

StringBuilder str=new StringBuilder("你好");

//在"你好"后面添加内容,将字符串变成"你好,com!"

   // str.append(',');

   // str.append("com!");

    //System.out.println("str="+str);

System.out.println("str="+str.append(',').append("com!"));

//将字符串变成"你好,cOM!"

//两种方式:

//1、使用delete方法删除om,然后在插入OM

//System.out.println("替换后:"+str.delete(4, 6).insert(4, "OM"));

//2、使用replace方法直接替换

System.out.println("替换后:"+str.replace(4, 6, "OM"));

//在字符串"你好,cOM"中取出"你好"并输出

System.out.println(str.substring(0,2));

}

}

使用方法

在这里插入图片描述

总结

  • String 和 StringBuilder
  • 介绍了这两个类的常用方法
  • 在 String 中介绍了 == 和 equals() 方法的区别
  • 介绍了String 和 StringBuilder 的区别,主要是不可变性
  • 通过学习,进一步掌握java文档(API)的使用
  • 三者区别图:

在这里插入图片描述

版权声明
本文为[HUIYL1]所创,转载请带上原文链接,感谢
https://segmentfault.com/a/1190000037794934

  1. 【计算机网络 12(1),尚学堂马士兵Java视频教程
  2. 【程序猿历程,史上最全的Java面试题集锦在这里
  3. 【程序猿历程(1),Javaweb视频教程百度云
  4. Notes on MySQL 45 lectures (1-7)
  5. [computer network 12 (1), Shang Xuetang Ma soldier java video tutorial
  6. The most complete collection of Java interview questions in history is here
  7. [process of program ape (1), JavaWeb video tutorial, baidu cloud
  8. Notes on MySQL 45 lectures (1-7)
  9. 精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件
  10. Refined spring boot 03: spring boot configuration files and configuration management, and reading configuration files in three ways
  11. 精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件
  12. Refined spring boot 03: spring boot configuration files and configuration management, and reading configuration files in three ways
  13. 【递归,Java传智播客笔记
  14. [recursion, Java intelligence podcast notes
  15. [adhere to painting for 386 days] the beginning of spring of 24 solar terms
  16. K8S系列第八篇(Service、EndPoints以及高可用kubeadm部署)
  17. K8s Series Part 8 (service, endpoints and high availability kubeadm deployment)
  18. 【重识 HTML (3),350道Java面试真题分享
  19. 【重识 HTML (2),Java并发编程必会的多线程你竟然还不会
  20. 【重识 HTML (1),二本Java小菜鸟4面字节跳动被秒成渣渣
  21. [re recognize HTML (3) and share 350 real Java interview questions
  22. [re recognize HTML (2). Multithreading is a must for Java Concurrent Programming. How dare you not
  23. [re recognize HTML (1), two Java rookies' 4-sided bytes beat and become slag in seconds
  24. 造轮子系列之RPC 1:如何从零开始开发RPC框架
  25. RPC 1: how to develop RPC framework from scratch
  26. 造轮子系列之RPC 1:如何从零开始开发RPC框架
  27. RPC 1: how to develop RPC framework from scratch
  28. 一次性捋清楚吧,对乱糟糟的,Spring事务扩展机制
  29. 一文彻底弄懂如何选择抽象类还是接口,连续四年百度Java岗必问面试题
  30. Redis常用命令
  31. 一双拖鞋引发的血案,狂神说Java系列笔记
  32. 一、mysql基础安装
  33. 一位程序员的独白:尽管我一生坎坷,Java框架面试基础
  34. Clear it all at once. For the messy, spring transaction extension mechanism
  35. A thorough understanding of how to choose abstract classes or interfaces, baidu Java post must ask interview questions for four consecutive years
  36. Redis common commands
  37. A pair of slippers triggered the murder, crazy God said java series notes
  38. 1、 MySQL basic installation
  39. Monologue of a programmer: despite my ups and downs in my life, Java framework is the foundation of interview
  40. 【大厂面试】三面三问Spring循环依赖,请一定要把这篇看完(建议收藏)
  41. 一线互联网企业中,springboot入门项目
  42. 一篇文带你入门SSM框架Spring开发,帮你快速拿Offer
  43. 【面试资料】Java全集、微服务、大数据、数据结构与算法、机器学习知识最全总结,283页pdf
  44. 【leetcode刷题】24.数组中重复的数字——Java版
  45. 【leetcode刷题】23.对称二叉树——Java版
  46. 【leetcode刷题】22.二叉树的中序遍历——Java版
  47. 【leetcode刷题】21.三数之和——Java版
  48. 【leetcode刷题】20.最长回文子串——Java版
  49. 【leetcode刷题】19.回文链表——Java版
  50. 【leetcode刷题】18.反转链表——Java版
  51. 【leetcode刷题】17.相交链表——Java&python版
  52. 【leetcode刷题】16.环形链表——Java版
  53. 【leetcode刷题】15.汉明距离——Java版
  54. 【leetcode刷题】14.找到所有数组中消失的数字——Java版
  55. 【leetcode刷题】13.比特位计数——Java版
  56. oracle控制用户权限命令
  57. 三年Java开发,继阿里,鲁班二期Java架构师
  58. Oracle必须要启动的服务
  59. 万字长文!深入剖析HashMap,Java基础笔试题大全带答案
  60. 一问Kafka就心慌?我却凭着这份,图灵学院vip课程百度云