本节重点思维导图

String 类

创建字符串

  1. String str = "I love ai";

在代码中遇到字符串常量时,"I love ai",编译器会使用该值创建一个 String 对象

可以使用关键字和构造方法来创建 String 对象

String 类有 11 种构造方法,这些方法提供不同的参数来初始化字符串

比如提供一个字符数组参数:

  1. public class StringDemo{
  2. public static void main(String args[]){
  3. char[] helloArray = { 'r', 'u', 'n', 'o', 'o', 'b'};
  4. String helloString = new String(helloArray);
  5. System.out.println( helloString );
  6. }
  7. }

String 类是不可改变的,所以你一旦创建了 String 对象,那它的值就无法改变了

如果需要对字符串做很多修改,那么应该选择使用 StringBuffer & StringBuilder 类

比较符号

  • ==:比较的是两个字符串的地址
  • equals():比较的是两个字符串的内容
  1. String str1 = "abc";
  2. String str2 = "abc";
  3.  
  4. System.out.println(str1.equals(str2));
  5. System.out.println(str1 == str2);
  6.  
  7. String str3 = new String("abc");
  8. System.out.println(str1.equals(str3));
  9. System.out.println(str1== str3);

实例:

用户登录:果用户输入的用户名和密码分别为zhangsan、123456,则登录成功,否则登录失败。

  1. public static void main(String[] args) {
  2. Scanner scanner = new Scanner(System.in);
  3.  
  4. System.out.println("input name:");
  5. String name = scanner.next();
  6.  
  7. System.out.println("input pwd");
  8. String pwd = scanner.next();
  9.  
  10. if ("zhangsan".equals(name) && "123456".equals(pwd)) {
  11. System.out.println("success");
  12. } else {
  13. System.out.println("failed");
  14. }
  15. }

User类:

  1. public class User {
  2. private int id;
  3. private String name;
  4. private byte age;
  5.  
  6. public User setId(int id) {
  7. this.id = id;
  8. return this;
  9. }
  10.  
  11. public User setName(String name) {
  12. this.name = name;
  13. return this;
  14. }
  15.  
  16. public User setAge(byte age) {
  17. this.age = age;
  18. return this;
  19. }
  20.  
  21. public static void main(String[] args) {
  22. User user = new User();
  23. user.setId(3).setName("fds").setAge((byte) 33);
  24.  
  25. }
  26.  
  27. }
  1. public class StreamFromString {
  2.  
  3. static String src = "今天的天气真的不好";
  4. public static void main(String[] args) throws IOException {
  5.  
  6. byte[] buff = new byte[1024];
  7. //从字符串获取字节写入流
  8. InputStream is = new ByteArrayInputStream(src.getBytes("utf-8"));
  9. int len = -1;
  10. while(-1 != (len = is.read(buff))) {
  11. //将字节数组转换为字符串
  12. String res = new String(buff, 0, len);
  13. System.out.println(res);
  14. }
  15. }

 字符串长度——xx.length();

  1. public class StringDemo {
  2. public static void main(String args[]) {
  3. String site = "www.runoob.com";
  4. int len = site.length();
  5. System.out.println( "菜鸟教程网址长度 : " + len );
  6. }
  7. }

连接字符串

  1. string1.concat(string2);
  1. "我的名字是 ".concat("Runoob");

更常用:      +

  1. "Hello," + " runoob" + "!"

示例:

  1. public class StringDemo {
  2. public static void main(String args[]) {
  3. String string1 = "菜鸟教程网址:";
  4. System.out.println("1、" + string1 + "www.runoob.com");
  5. }
  6. }

创建格式化字符串

 String 方法

额外:

这部分比较重点,请看网页最下端笔记内容

 StringBuffer 和 StringBuilder 类

https://www.cnblogs.com/su-feng/p/6659064.html

对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类

和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象

 

String 长度大小不可变

StringBuffer 和 StringBuilder 长度可变

StringBuffer 线程安全 StringBuilder 线程不安全

StringBuilder 速度快

建议使用 StringBuilder 类。然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类

  1. public class Test{
  2. public static void main(String args[]){
  3. StringBuffer sBuffer = new StringBuffer("菜鸟教程官网:");
  4. sBuffer.append("www");
  5. sBuffer.append(".runoob");
  6. sBuffer.append(".com");
  7. System.out.println(sBuffer);
  8. }
  9. }

详情

示例:

  1. public static void main(String[] args) {
  2. StringBuilder sb = new StringBuilder();
  3. sb.append("aaa");
  4. sb.append("bbb");
  5. sb.append("ccc");
  6.  
  7. System.out.println(sb);
  8.  
  9. sb.insert(3, "1234");
  10. System.out.println(sb);
  11.  
  12. sb.insert(4, true);
  13. System.out.println(sb);
  14.  
  15. sb.deleteCharAt(8);
  16. System.out.println(sb);
  17.  
  18. sb.delete(3, 6);
  19. System.out.println(sb);
  20.  
  21. int length = sb.length();
  22. System.out.println(length);
  23.  
  24. sb.reverse();
  25. System.out.println(sb);
  26.  
  27. StringBuffer stringBuffer = new StringBuffer();
  28. stringBuffer.append("aa").append("bb").append("cc");
  29. System.out.println(stringBuffer);
  30. }

产生随机字符

  1. public static void main(String[] args) {
  2. String string = UUID.randomUUID().toString();
  3. System.out.println(string);
  4. System.out.println(string.length());
  5. }

Java ——String 类 StringBuffer 和 StringBuilder类 随机字符的更多相关文章

  1. JAVA String、StringBuffer、StringBuilder类解读

    JAVA String.StringBuffer.StringBuilder类解读 字符串广泛应用 在 Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作 ...

  2. String、StringBuffer和StringBuilder类的区别

    Java提供了String.StringBuffer和StringBuilder类来封装字符串,并提供了一系列操作字符串对象的方法. 它们的相同点是都用来封装字符串:都实现了CharSequence接 ...

  3. 浅谈java中的String、StringBuffer、StringBuilder类的区别以及关系

    在java中最常见的使用就是对字符串的操作:首先先说一下对字符串的理解:字符串就是一连串字符序列,Java提供了String和StringBuffer两个类来封装字符串,并提供一系列方法来操作字符串对 ...

  4. Java基础知识(JAVA中String、StringBuffer、StringBuilder类的区别)

    java中String.StringBuffer.StringBuilder是编程中经常使用的字符串类,他们之间的区别也是经常在面试中会问到的问题.现在总结一下,看看他们的不同与相同. 1.可变与不可 ...

  5. Java笔记——String、StringBuffer和StringBuilder类

    String类是不可变类,即一旦一个String对象被创建以后,包含在这个对象中的字符串序列是不可改变的,直至这个对象被销毁.   StringBuffer对象则代表一个字符序列可变的字符串,当一个S ...

  6. 【JAVA中String、StringBuffer、StringBuilder类的使用】

    一.String类概述 1.String对象一旦创建就不能改变. 2.字符串常量池. 字符串常量池的特点:池中有则直接使用,池中没有则创建新的字符串常量. 例1: public class Strin ...

  7. 总结 String、StringBuffer与StringBuilder类中常用的方法

    一.String类的常用方法 1.获取: 1)获取字符串str长度 int i = str.length(); 2)根据位置(index)获取字符 char c = str.charAt(index) ...

  8. Java String和StringBuffer和StringBuilder

    最近在牛课网上做了几道字符串操作的题目,好久没有做题了,之前用的也是大一时C语言做的,对Java字符串操作不太了解,所以深入了解一下String类的相关用法 String构造方法 String() 空 ...

  9. Java String、StringBuffer、StringBuilder有什么区别

    ① String是Java语言非常基础和重要的类,提供了构造和管理字符串的各种基本逻辑.它是典型的immutable类,被声明成final class,所有属性也都是final的,由于它的不可变性,类 ...

随机推荐

  1. KVC,KVO详解

    Key Value Coding Key Value Coding是cocoa的一个标准组成部分,它能让我们可以通过name(key)的方式访问property, 不必调用明确的property ac ...

  2. ElasticSearch - 解决ES的深分页问题 (游标 scroll)

    https://www.jianshu.com/p/f4d322415d29 1.简介 ES为了避免深分页,不允许使用分页(from&size)查询10000条以后的数据,因此如果要查询第10 ...

  3. windows_vs编译过程

    visual studio 2010 编译程序时,首先是cpp经过预处理,处理掉#define,#include等等.#include部分,将头文件部分替换到cpp中.之后进行优化过程,到.s.之后进 ...

  4. RK3288之kernel目录结构以及功能

    :~/RK3288/kernel$ ls android include MAINTAINERS security arch init Makefile sound backported-featur ...

  5. Floyd Cycle Detection

    Floyd判圈算法能在O(n)时间复杂度内判断迭代函数或链表中是否有环,并求出环的长度与起点 判断环存在 通常采用快慢指针的方式来判断环是否存在 从绿色起点G开始,快指针每次走2步,慢指针每次走1步, ...

  6. 【学习】014 深入理解Http协议

    Http协议入门 什么是http协议 http协议: 对浏览器客户端 和  服务器端 之间数据传输的格式规范 查看http协议的工具 1)使用火狐的firebug插件(右键->firebug-& ...

  7. bzoj3091 城市旅行 LCT + 区间合并

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=3091 题解 调了整个晚自习才调出来的问题. 乍一看是个 LCT 板子题. 再看一眼还是个 LC ...

  8. python 小游戏,和电脑玩剪刀石头布

    # -*- coding: utf-8 -*- """ Created on Fri Oct 25 16:28:12 2019 if判断综合演练,剪刀石头布 @autho ...

  9. 最简单的注册美区Apple ID方法

    最简单方法注册苹果美区Apple ID 1.打开苹果官网链接 苹果官网 2. 点击右下角的 United States 3. 点击图片中的选项 4.点击右上角的选项创建新的Apple ID 注意是新的 ...

  10. 【GDOI 2016 Day2】第一题 SigemaGO

    题目 分析 拆点连边+spfa. 首先把图分成2lim+1层,也就是每个点拆成2lim+1个点. 如果a和b之间.b和c有一条有向边,那么连边(k,a)-->(k+1,b),(k+1,b)--& ...