字符串

1.字符串定义

    字符串:简单理解为:由一个签字将若干个字符串起来的串儿,叫字符串官方理解:字符串是由多个字符组成的一串数据(字符序列)字符串可以看成是字符数组

通过观察API发现:
1、String代表的是字符串。属于java.lang包下,所以在使用的时候不需要导包
2、String类代表字符串。 Java程序中的所有字符串文字(例如"abc" )都被实现为此类的实例。(对象)
3、字符串不变; 它们的值在创建后不能被更改。
字符串是常量,一旦被赋值,字符串本身不能被修改。

2.String的构造方法(注意String构造方法是将字符或字节数组转换为字符串,而用String的valueOf方法是将数组转化为字符串,其中包括字符数组)

(1).public String()

public class StringDemo1 {public static void main(String[] args) {String s=new String("奥里给");System.out.println(s.toString());//String类中重//写toString()方法System.out.println(s.length());//如果字符串中没有//字符,返回0

(2).public String(byte[] bytes)根据一个字节数组创建出一个字符串对象

byte[] bytes={95,97,98,99,100};String s1=new String(bytes);System.out.println("bytes字节数组对应的字符串为:s1:"+s1);//注意这里对应的是Ascll码对应的字符串 结果:_abcdSystem.out.println(s1.length());

(3).public String(byte[] bytes,int offset,int length)将字节数组中的一部分转化成字符串

byte[] bytes1={'d','a','d','r','q','y','q'};String s2=new String(bytes1,2,3);System.out.println("bytes1字节数组的部分对应的字符串为:"+s2);//结果:drq

4.public String(char[] value) 将字符数组转成一个字符串

char[] chars=new char[]{'s','e','r','q',};String s3=new String(chars);System.out.println("chars字符数组对应的字符串为:"+s3);//chars字符数组对应的字符串为:serq

5.public String(char[] value,int index,int count)将字符数组的一部分转化为字符串

 char[] chars1={'s','e','r','q','a','q','o','p'};String s4=new String(chars1,2,5);System.out.println("chars字符数组的部分对应的字符串为:"+s4);//chars字符数组的部分对应的字符串为:rqaqo

6.public String(String original)
初始化新创建的String对象,使其表示与参数相同的字符序列;
// 换句话说,新创建的字符串是参数字符串的副本。

String s5="大家好";String s6=new String(s5);System.out.println(s6);System.out.println(s6.length());

3. 字符串是常量,它的值在创建后不能被改变

    String s = "hello";s += "world";请问s的值是什么?

内存图辅助理解:

  public class StringDemo2 {public static void main(String[] args) {String s="Hello";s+="world";System.out.println("拼接后的字符串为:"+s);}
}

4. String s = new String(“hello”)和String s = “hello”;的区别?

字符串比较之看程序写结果
字符串拼接之看程序写结果

注意事项:
1、==比较引用数据类型的时候,比较的时候地址值
2、String类中使用equals方法比较的是字符串的值,因为String类中重写了equals方法

字符串new与不new的区别
举例:1.

public class StringDemo3 {public static void main(String[] args) {String s1=new String("hello");String s2="hello";System.out.println(s1==s2);//falseif (s1!=null){System.out.println(s1.equals(s2));}//trueelse System.out.println("s1为null");}
}

2.看程序写结果

public class StringDemo4 {public static void main(String[] args) {String s1=new String("helloworld");String s2=new String("helloworld");System.out.println(s1==s2);//falseSystem.out.println(s1.equals(s2));//trueString s3="myname";String s4=new String("myname");System.out.println(s3==s4);//falseSystem.out.println(s3.equals(s4));//trueString s5="happy";String s6="happy";System.out.println(s5==s6);//trueSystem.out.println(s5.equals(s6));//true}
}

5.字符串相加的情况

(1)、字符串如果是变量相加,是先在常量池中开辟空间,然后再做拼接。
(2)、字符串如果是常量相加,是先相加,然后再去常量池中去找,如果找到了,就返回,如果没有找到就开辟新的空间,存储拼接后的值。

举例:

public class StringDemo5 {public static void main(String[] args) {String s1="hello";String s2="world";String s3="helloworld";String s4="hello"+"world";System.out.println(s3==(s1+s2));//falseSystem.out.println(s3==s4);//trueString s5=s1+s2;System.out.println(s5==s4);//flaseSystem.out.println(s5==s3);//false}
}

6 String类的判断功能:

(1) boolean equals(Object obj)比较字符串中的内容是否相同,区分大小写

public class StringDemo6 {public static void main(String[] args) {// boolean equals(Object obj)比较字符串中的内容是//否相同,区分大小写String s1="helloworld";String s2=new String("helloworld");System.out.println(s1.equals(s2));//true

(2) boolean equalsIgnoreCase(String str)比较字符串中的内容是否相同,忽略大小

 String s3="Hellowoldpeace";String s4=new String("HELLOWOLDpeaCE");System.out.println(s3.equalsIgnoreCase(s4));//true

(3) boolean contains(String str)判断大的字符串中是否包含小的字符串,如果包含,返回true,反之返回false,区分大小写

  String s5="happybirthday";String s6=new String("birthday");String s7="hyb";System.out.println(s5.contains(s6));//trueSystem.out.println(s5.contains(s7));//false

(4). boolean startsWith(String str)测试此字符串是否以指定字符串开头

  String s8=new String("ooodayuuooo");String s9="ooo";String s10="ooodayuuoo";System.out.println(s8.startsWith(s9));//trueSystem.out.println(s8.startsWith(s10));//true
    // 区分大小写

(5) . boolean endsWith(String str) 测试此字符串是否以指定字符串结尾区分大小写

 String s11=new String("jsndool");String s12="ool";String s13="deool";System.out.println(s11.endsWith(s12));//trueSystem.out.println(s11.endsWith(s13));//false

(6). boolean isEmpty()判断字符串是否为空

 String s14="ssssssssss";String s15="";String s16=null;System.out.println(s14.isEmpty());//falseSystem.out.println(s15.isEmpty());//true//System.out.println(s16.isEmpty());//NullPointerException}
}

7. String类的获取功能:

(1)int length() 获取字符串的长度

 public class StringDemo7 {public static void main(String[] args) {// int length() 获取字符串的长度String s =new String("sdjhfakjhdajkfhjhakfj");System.out.println(s.length());//21

(2) int indexOf(int ch)返回指定字符第一次出现的字符串内的索引。

String s5="day one day";System.out.println(s5.indexOf('s'));//-1System.out.println(s5.indexOf('a'));//1

(3) int indexOf(String str)返回指定子字符串第一次出现的字符串内的索引, 返回的是小串的第一个字符在大串中出现的索引位置

 String s2="everyday happy birthday";String s3="happy";String s4="birt";System.out.println(s2.indexOf(s3));//9 注意空格//也算一个字符System.out.println(s2.indexOf(s4));//15System.out.println(s2.indexOf('o'));//-1 没有则//返回-1

(4) int indexOf(int ch,int fromIndex)返回指定字符第一次出现的字符串内的索引,以指定的索引开始搜索。如果找到了,返回的是字符在整个字符串中的索引

 String s6=new String("justoneday");System.out.println(s6.indexOf('o',3));//注意无论//从索引几开始,返回的都是该字符在整个字符串中的索引System.out.println(s6.indexOf('l',4));//-1System.out.println(s6.indexOf('d',1000));//-1 //注意此方法不会报出索引越界异常

(5) .int indexOf(String str,int fromIndex) indexOf()方法不会报出索引越界异常,返回指定字符串第一次出现的字符串内的索引,以指定的索引开始搜索。

String s7="yydswonderful";System.out.println(s7.indexOf("won",3));//4 返回//的是子字符串的首字母在整个字符串中首次出现的索引System.out.println(s7.indexOf("ful",1000));//-1System.out.println(s7.indexOf("yydo",0));//-1

(6) . char charAt(int index)返回指定索引处的字符

String s1=new String("doublekill");System.out.println(s1.charAt(1));//获取索引为1的//字符,所以结果为o

(7) String substring(int start)从指定位置处截取字符串,包括开始截取的位置,截取到末尾如果给的索引值不存在,报错

  String s8=new String("hardworkingeveryday");String s9=s8.substring(11);System.out.println(s9);//everyday// System.out.println(s8.substring(1000));//StringIndexOutOfBoundsExceptionSystem.out.println(s8.substring(0));//hardworkingeveryday

(8) String substring(int start,int end) // 截取字符串的一部分出来,截取的串从start位置开始截取,截取到end-1的位置结束左闭右开 [,) 含头不含尾。

  String s10="sgdv天都黑了znja";System.out.println(s10.substring(4,8));//天都黑了// System.out.println(s10.substring(4,100));//StringIndexOutOfBoundsExceptio

8.String类的转换功能:

(1) byte[] getBytes()使用平台的默认字符集将此String编码为字节序列,将结果存储到新的字节数组中。将字符串转成字节数组 与s=new String(bytes);是相反的方法

public class StringDemo8 {public static void main(String[] args) {String s = "happyBrithDAY";byte[] bytes = s.getBytes();System.out.println(bytes);//[B@4554617c字符数组的//地址值for (int i = 0; i < bytes.length; i++) {System.out.print(bytes[i] + ",");//104,97,112,112,121,66,114,105,116,104,68,65,89// 输出为ASCLL码值}System.out.println();

(2) char[] toCharArray() 将字符串转成字符数组

 String s1 = "hellonicetomeetyou";char[] chars = s1.toCharArray();for (int i = 0; i < chars.length; i++) {System.out.print(chars[i] + ",");//h,e,l,l,o,n,i,c,e,t,o,m,e,e,t,y,o,u,}System.out.println();

(3). static String valueOf(char[] chs)将字符数组转成字符串

char[] chars1=new char[]{'w','a','努','力','赚','钱','y','y','d','s'};String s2=String.valueOf(chars1);//注意这是//static修饰需要用类名调用System.out.println(s2);//wa努力赚钱yyds

(4) static String valueOf(int i)将int类型的数据转成字符串 此方法不仅可以转int型,其他基本数据类型也可以转

  int i=100000000;String s3=String.valueOf(i);System.out.println(s3);//100000000

(5) String toLowerCase()将字符串中的内容全部转小写

 String s4="HELLOGOODmorNINg";String s5=s4.toLowerCase();System.out.println(s5);//hellogoodmorning

(6) String toUpperCase()将字符串中的内容全部转大写

String s6="more and more";String s7=s6.toUpperCase();System.out.println(s7);//MORE AND MORE

(7) String concat(String str)将小括号中str的字符串拼接到大字符串的后面

String s8="How are you";String s9="I am fine,thank you";String s10=s8.concat(s9);System.out.println(s10);//How are youI am fine,thank you

(8) public String[] split(String regex) //需求:求出字符串中的每一个单词 一定注意这里返回的是一个字符串数组,要用一个字符串数组去接收

 String s11="do - good - evening - every- one";String[] strings=s11.split("-");for (int j=0;j< strings.length;j++){System.out.print(strings[j]);//do  good  evening  every one}
}

9.String类的其他功能:

(1) 替换功能

  • String replace(char old,char new)将新的字符替换字符串中指定的所有字符,并返回一个替换后的字符串,但原字符s不变
 public class StringDemo9 {public static void main(String[] args) {// String replace(char old,char new)  将新的字符//替换字符串中指定的所有字符,并返回一个替换后的字符串String s="2022/1/20";String s1=s.replace('/','-');System.out.println(s1);//2022-1-20System.out.println(s);//2022/1/20
  • String replace(String old,String new)将新的字符串替换字符串中指定的所有字符串,并返回一个替换后的字符串
 String s2="goodafternoon";String s3=s2.replace("afternoon","morning!!!!");System.out.println(s3);//goodmorning!!!!System.out.println(s2.replace("opp","good"));//goodafternoon要被替换的字符串不存在的话就返回原来字符串

(3)String trim()去除字符串两空格去除字符串两空格仅仅去头部和尾部的空格

 String s4="  努力赚钱           ";String s5=s4.trim();System.out.println(s5);//努力赚钱

(4)按字典顺序比较两个字符串

int compareTo(String str)
比较字符串是否相同,如果相同返回0,如果两串不同的话,1.例如s10是s6的子串的情况下compareTo的结果就用s6.length-s10.length
2.如果它不是s6的字串的话就用s6与s9第一个不相同的字母的ASCLL码值去相减,例如就用o的ASCLL码值减去p的ASCLL码值结果为-1.

  • int compareTo(String str)
    int compareToIgnoreCase(String str)(忽略大小写)
 /*此算法原码为int len1 = value.length;int len2 = anotherString.value.length;int lim = Math.min(len1, len2);char v1[] = value;char v2[] = anotherString.value;int k = 0;while (k < lim) {char c1 = v1[k];char c2 = v2[k];if (c1 != c2) {return c1 - c2;}k++;}return len1 - len2;
}
 String s6="hello";String s7="hello";String s8="qwe";String s9="hellpq";String s10="hel";System.out.println(s6.compareTo(s7));//0System.out.println(s6.compareTo(s8));//-9System.out.println(s6.compareTo(s9));//-1System.out.println(s6.compareTo(s10));//2}
}

总结果:

【常用类】字符串:String的构造方法、字符串是常量,String类的判断、 获取、转换、和其他功能、它的值在创建后不能被改变、new与不new的区别、字符串相加的情况、相关推荐

  1. java构造一个水果类_Java基础入门之Object类、匿名内部类、构造方法的继承解析...

    前言 大家好,我是Java进阶者.这篇文章我们主要介绍Java基础中的Object类.匿名内部类.构造方法的继承知识,一起来学习下吧! 一.Object类 1.Object类是所有类的父类,所有类都继 ...

  2. Notes 20180311 : String第三讲_深入了解String

    很多前辈我可能对于我的这节文章很困惑,觉得String这个东西还有什么需要特别了解的吗?其实不然,String是一个使用十分频繁的工具类,不可避免地我们也会遇到一些陷阱,深入了解String对于我们避 ...

  3. java字符串拼接例子_Java详解【String】+【StringBuilder vs StringBuffer】+【字符串拼接】...

    String详解 注意区分对象和对象的引用 首先来看一下我在jdk中找到的String源代码,这里只截取开头的小小一部分 public final class String implements ja ...

  4. string型c语言,C++中string字符串类型介绍

    1. 简介 C语言中通过字符相连已经基本创造出了字符串的常规操作,然而,字符串在C语言中并不是常规类型,而是一个类似于数组的结构,在C++中,通过模板类的操作创建了string类,这样的方法更适合于现 ...

  5. android 字符串数组去重,GitHub - deng-ming-hao/ec-do: 实例为日常开发常用的小实例,包括数组去重,打乱数组,字母大小写转换,cookie操作的封装等。...

    ec-do 自己封装的常用操作实例 实例为日常开发常用的小实例,包括数组去重,打乱数组,字母大小写转换,cookie操作的封装等. 使用方法 引入ec-do.js //去除空格 ecDo.trim(' ...

  6. Java 字符串拼接的三种方式 “+”、“String.format()”、“StringBuilder.append()”,换行拼接“\r\n”

    在进行功能开发的时候,会经常需要拼接多个字符串,比如在请求地址上的参数拼接.返回一个信息描述文段需要拼接多个子文段等,那我们常用的解决方式就是以下三种了,第一种也是比较常用简单的,直接用+号进行拼接s ...

  7. C# 字符串拼接性能探索 c#中+、string.Concat、string.Format、StringBuilder.Append四种方式进行字符串拼接时的性能...

    本文通过ANTS Memory Profiler工具探索c#中+.string.Concat.string.Format.StringBuilder.Append四种方式进行字符串拼接时的性能. 本文 ...

  8. 将Python字符串转换为Int,将Int转换为String

    In this tutorial, we will learn how to convert python String to int and int to String in python. In ...

  9. 【字符串全排列】LeetCode 567. Permutation in String

    [字符串全排列]LeetCode 567. Permutation in String Solution1:[超时,未能AC] 得到s1的所有全排列组合,然后在s2中查找s1的全排列集合 因为超时,未 ...

  10. C++字符串的几种输入方法(string和字符数组)

    ps:本文大部分内容参考于这篇博客,在这里加入了自己对这些函数在字符数组和string变量的理解和总结. C++中的输入大致有6种方法:cin,cin.get(),cin.getline(),gets ...

最新文章

  1. 轻松学Pytorch – 行人检测Mask-RCNN模型训练与使用
  2. python基础-字符串
  3. 我阅读科研文献的一些做法[转]
  4. python中的urlencode和urldecode的用法
  5. git 提交各种情况下的处理方式
  6. 判断字符为空_49. 把字符串转换成整数(剑指offer)
  7. 万里挑一!北大AI女神每天必看的几个优质公众号
  8. Spring的AOP-操作术语
  9. pb 打印html页面,用PB开发WEB应用
  10. 环信SDK 踩坑记webIM篇(一)
  11. (转)在编写Spring框架的配置文件时,标签无提示符的解决办法
  12. Java基础-设计模式之-代理模式Proxy
  13. 《javascript高级程序设计》读书笔记——作用域
  14. logistic回归详解(二):损失函数(cost function)详解
  15. 计算机作业word电子杂志,怎么用Word文档制作电子杂志目录
  16. C语言求田径场周长和面积,田径场尺寸计算及画法
  17. 查看手机wifi密码
  18. GD32F303固件库开发(7)----printf打印配置
  19. Geth的安装与配置(Windows版)
  20. (机器学习)随机森林填补缺失值的思路和代码逐行详解

热门文章

  1. 最佳实践 | 联通数科基于 DolphinScheduler 的二次开发
  2. 金融市场联动相关、风险测度、风险溢出 Copula、CoVaR、Garch、DCC、藤Vine、BEKK、SV、ECM
  3. 吐血推荐 | 5+1款源代码管理笔记本(全平台)
  4. Ubuntu安装ssh远程连接服务
  5. EasyRecovery14永久免费版密钥电脑硬盘恢复教程
  6. php 代付功能_常见的第三方支付平台代付接口(php源码)
  7. Cuda与GPU显卡驱动版本一览
  8. 搜索引擎的原理以及倒排索引技术
  9. 启动项目时出现java.io.EOFException异常
  10. Python拟合SHARP红外测距传感器相关数据