文章目录

  • 一、创建字符串
  • 二、字符串比较相等
  • 三、字符串常量池
  • 四、理解字符串不可变
  • 五、字符、字节和字符串
    • 1.字符与字符串
    • 2.字节与字符串
  • 六、字符串常见操作
    • 1.字符串比较
    • 2.字符串查找
    • 3.字符串替换
    • 4.字符串拆分
    • 5.字符串截取
    • 6.其他操作
  • 七、StringBuffer和StringBuilder

一、创建字符串

常见的创建字符串的方式:
1.String str = “Hello”;//直接赋值
2.String str2 = new String(“Hello”);//new一个新的String
3.char[] array = {‘a’,‘b’,‘c’};
String str3 = new String(array);
注:被双引号("")引起来的东西是字符串常量,储存在堆中的常量池中,如果常量池中有这个常量,则直接用这个常量。String是引用类型

二、字符串比较相等

public class StringPractice {public static void main(String[] args) {boolean tmp ;String str = "Hello";String str1 = str;System.out.println(str == str1);String str2 = "He";String str3 = "llo";String str4 = str2 + str3;System.out.println(str == str4);}
}

运行结果:

上述程序中,str == str1和str == str4都是比较str这个引用是否指向同一个对象。

但是

String str = "Hello";
String str5 = "He" + "llo";System.out.println(str == str5);

运行结果

注:如果两个常量在运算时,编译器默认是运算后的值,所以他们都指向常量池中的Hello,所以运行结果为true。
比如:

这里就会报错,在计算时,它会将数值类型提升到int,因为在编译时,编译器不知道a和b里面存的是什么,但是如果被final修饰呢?

这里就不会报错,也是上面的原理。

equals使用注意事项
String str = new String(“Hello”);
1.System.out.println(str.equals(“Hello”));
2.System.out.println(“Hello”.equal(str));
这两种方法中,方法2更保险,防止了str为空的情况空指针异常

String str = "Hello";
String str2 = "He";
String str3 = "llo";
String str4 = str2 + str3;
System.out.println(str == str4);
System.out.println(str.equals(str4));

运行结果

这里equals直接比较引用所指的对象。

三、字符串常量池


在上面我们已经举了常量池的例子,常量被存放在常量池中,如果常量池中有这个常量,那就可以直接使用这个常量。

1.直接赋值
String str = “Hello”;
System.out.println(str);
2.采用构造方法
String str = new String(“hello”);

四、理解字符串不可变

字符串是一种不可变的对象,它的内容不可改变,如果改变对象内容,改变的是其引用的指向而已。String类的内部实现也是基于char[]来实现的,但是String类并没有提供set方法之类的来修饰内部的字符数组

String str = "hello" ;
str = str + " world" ;
str += "!!!" ;
System.out.println(str);

运行结果

hello world!!!

形如 += 这样的操作, 表面上好像是修改了字符串, 其实不是。那么如果实在需要修改字符串, 例如, 现有字符串 str = “Hello” , 想改成 str = “hello” , 该怎么办?
常见办法: 借助原字符串, 创建新的字符串
特殊方法:利用反射

五、字符、字节和字符串

1.字符与字符串

(1)public String (char value[]) (构造类型)
将字符数组中的所有内容变为字符串
(2)public String(char value[],int offset,int count) (构造类型)
将部分字符数组中的内容变为字符串
(3)public char charAt(int index) (普通类型)
取得指定索引位置的字符,索引从0开始
(4)public char[] toCharArray() (普通方法)
将字符串变为字符数组返回

ublic class GetPos {public static void main(String[] args) {//获取指定位置字符String str = "hello";System.out.println(str.charAt(0));//下标从0开始//将字符串变为字符数组char[] data = str.toCharArray();for (int i = 0; i < data.length; i++) {System.out.print(data[i] + " ");}//将字符数组转为字符串System.out.println(new String(data));//全部转换System.out.println(new String(data,5,5));//部分转换}
}

运行结果

2.字节与字符串

字节常用于数据传输以及编码转换的处理中,String也能方便的和byte[]相互转换
(1)public String(byte byte[]) (构造类型)
将字节数组变为字符串
(2)public String(byte byte[],int offset,int length) (构造类型)
将部分字节数组转为字符串
(3)public byte[] getBytes() (普通类型)
将字符串以字节数组的形式返回
(4)public byte[] getBytes(String charsetName)throws UnsupportedEncodingException (普通类型)
编码转换处理

//字符串与字节数组的转换处理//String 转byte[]byte[] data2 = str.getBytes();for (int i = 0; i < data2.length; i++) {System.out.println(data2[i] + " ");}//byte[] 转 StringSystem.out.println(new String(data2));

运行结果

六、字符串常见操作

1.字符串比较

(1)public boolean equals(Object anObject) (普通类型)
区分大小写比较
(2)public boolean equalsIanoreCase(String anotherString) (普通类型)
不区分大小写比较
(3)public int compareTo(String anotherString) (普通方法)
比较两个字符串大小关系

观察compareTo()比较

System.out.println("A".compareTo("a"));System.out.println("a".compareTo("A"));System.out.println("A".compareTo("A"));System.out.println("AB".compareTo("AC"));System.out.println("刘".compareTo("杨"));

运行结果

2.字符串查找

(1)public boolean contains(CharSequence s) (普通类型)
哦按段一个字符串是否存在
(2)public int indexOf(String str) (普通类型)
在主字符串中查找子字符串的位置,返回下标
(3)public int lastIndexOf(String str) (普通类型)
从后往前查找字符串位置
(4)public boolean startWith(String prefix) (普通类型)
判断是否以指定字符串开头
(5)public boolean endsWith(String suffix) (普通类型)
判断是否以指定字符串结尾

public class TestClass {public static void main(String[] args) {String str = "**@@HelloWorld";System.out.println(str.indexOf("World"));//由前往后找字符串位置System.out.println(str.indexOf("bit"));if(str.indexOf("Hello") != -1){System.out.println("可以查到指定字符串!");}System.out.println(str.lastIndexOf("W"));//从后往前找字符串位置System.out.println(str.startsWith("**"));System.out.println(str.endsWith("ord"));}
}

运行结果

3.字符串替换

(1)public String replaceAll(String regex,String replacement) (普通类型)
替换所有指定内容
(2)public String replaceFirst(Strinf regex,String replacement) (普通类型)
替换首个内容

public class TestClass {public static void main(String[] args) {String str = "**@@HelloWorld";System.out.println(str.replaceAll("l","@"));System.out.println(str.replaceFirst("l","&"));}
}

运行结果

4.字符串拆分

(1)public String[] split(String regex) (普通类型)
将字符串全部拆分
(2)public String[] split(String regex,int limit) (普通类型)
将字符串部分拆分

public class TestClass {public static void main(String[] args) {String str2 = "hello wo&rld hel&lo bit";String[] s = str2.split(" ");String[] s2 = str2.split("&");for (int i = 0; i < s.length; i++) {System.out.print(s[i] + " ");}System.out.println();for (int i = 0; i < s2.length; i++) {System.out.print(s2[i] + " ");}}
}

运行结果

5.字符串截取

(1)public String substring(int beginIndex) (普通类型)
从指定索引截取到结尾
(2)public String substring(int beginIndex,int endIndex) (普通类型)
截取部分内容

public class TestClass {public static void main(String[] args) {String str3 = "helloworld";System.out.println(str3.substring(4));System.out.println(str3.substring(4,8));}
}

运行结果

6.其他操作

(1)public String trim() (普通类型)
去掉字符串中的左右空格(换行,制表符等),保留中间空格
(2)public String toUpperCase() (普通类型)
字符串转大写,只转换字母
(3)public string toLowerCase (普通类型)
字符串转小写,只转换字母
(4)public native String intern() (普通类型)
字符串入池操作
(5)public String concat(String str) (普通类型)
字符串连接,等同于+,不入池
(6)public int length() (普通类型)
取得字符串长度
(7)public boolean isEmpty() (普通类型)
判断是否为空字符串,但不是null,而是长度为0

public class TestClass {public static void main(String[] args) {String str4 = "   hello world   ";System.out.println(str4);System.out.println(str4.trim());//去除前后空格,保留中间空格System.out.println(str4.toUpperCase());//小写转大写System.out.println(str4.toLowerCase());//大写转小写System.out.println(str4.length());//字符串长度}
}

运行结果

七、StringBuffer和StringBuilder

通常来讲String的操作比较简单,但是由于String的不可更改特性,为了方便字符串的修改,提供StringBuffer和StringBuilder类。
StringBuffer 和 StringBuilder 大部分功能是相同的,StringBuffer的方法前面都有synchronized,为了保护多线程安全。
在String中使用"+"来进行字符串连接,但是这个操作在StringBuffer类中需要更改为append()方法:

public synchronized StringBuffer append(各种数据类型 b)

代码示例

     String str = "hello";String str2 = "world";StringBuffer sb = new StringBuffer();sb.append(str);sb.append(str2);String str3 = sb.toString();System.out.println(sb);

运行结果

注意:在循环中不要用String += 来拼接字符串。
String、StringBuffer和StringBuild的区别
1.String的拼接会产生新的对象,但其他两个使用append方法进行拼接,返回的是自己当前的对象
2.String的拼接会被优化为StringBuild
3.多线程使用StringBuffer进行字符串的拼接,采用同步处理,保护了多线程的安全
单线程使用StringBuild进行字符串的拼接
4.String的内容不可修改,StringBuffer和StringBuild的内容可以修改。

详解String类型相关推荐

  1. 【Redis之ZSet类型的详解ZSet类型中常用命令的实践】

    Redis之ZSet类型的详解&ZSet类型中常用命令的实践 知识回顾: 通过对Redis中的String的命令做了充分的讲解以及实践学习 通过对Redis中String类型之Bit命令的详解 ...

  2. java源码详解——String类

    java源码详解--String类目录: Java String 类 下面开始介绍主要方法: Java charAt() 方法 Java compareTo() 方法 int compareTo(St ...

  3. python时间函数详解_Python:Numpy库基础分析——详解datetime类型的处理

    原标题:Python:Numpy库基础分析--详解datetime类型的处理 Python:Numpy库基础分析--详解datetime类型的处理 关于时间的处理,Python中自带的处理时间的模块就 ...

  4. rust机枪塔攻击模式_《辐射4》机枪塔类型及使用心得图文详解 全类型机枪塔伤害介绍...

    今天小编给大家分享的是玩家"影与静"总结的<辐射4>机枪塔类型及使用心得图文详解 全类型机枪塔伤害介绍,一起来看下吧. 查过相关攻略,内容也就是在庇护山庄和星光做的攻速 ...

  5. 序列内置方法详解(string/list/tuple)

    一.常用方法集合 1.1.string,字符串常用方法 以下举例是python2.7测试: 函数名称 作用 举例 str.capitalize() 字符串第一个字符如果是字母,则把字母替换为大写字母. ...

  6. MP4文件格式详解——文件类型ftyp

    原谅地址:http://blog.csdn.net/pirateleo/article/details/7583321 文件类型ftyp(ISO-14496-12) Author:Pirate Leo ...

  7. MP4文件格式详解——文件类型ftyp(转)

    文件类型ftyp(ISO-14496-12) Author:Pirate Leo Email:codeevoship@gmail.com ISO 14496 - 12 定义了一种封装媒体数据的基础文件 ...

  8. python格式化字符串_阿博的Python之路详解String数据类型

    这是阿博的第16篇文章 之前分享了Python的Number数据类型,今天给大家详细讲一下我学习到Python的String数据类型.在日常开发当中String类型应该是我们最常使用到的数据类型,那么 ...

  9. 多媒体 MP4文件格式详解——文件类型ftyp

    ISO 14496 - 12 定义了一种封装媒体数据的基础文件格式,mp4.3gp.ismv等我们常见媒体封装格式都是以这种基础文件格式为基础衍生的. 如果从全局角度了解基础文件格式,请看我之前的博文 ...

最新文章

  1. 必会重构技巧:使用多态替换条件
  2. jQuery 学习笔记一(认识jQuery jQuery选择器 jQuery中的DOM操作)
  3. java怎么输出集合_Java 输出集合中的元素
  4. 怎么把向上滑动取消_美瞳滑片是什么意思?为什么会滑片?怎么解决?
  5. 爬虫技巧:在pycharm 下 调试 scrapy项目
  6. python--递归计算n的价乘
  7. 如何查询mysql中执行效率低的sql语句
  8. String 截取字符串#中间的文本
  9. 把照片的字转换为数字版
  10. wampServer虚拟主机配置
  11. c语言——求逆矩阵,伴随矩阵,行列式
  12. S@Kura的PHP进阶之路(二)
  13. NEO 交易所钱包开发之离线签名【区块链】JAVA
  14. 蓝桥杯真题——猜年龄python讲解
  15. 统计学假设检验中 p 值的含义具体是什么?
  16. 十大工业物联网常用传感器,你用过哪些?
  17. STM32项目设计:基于STM32F1的智能门锁PCB、源码(4种解锁方式)
  18. dd-wrt无线设置_通过DD-WRT的高级技巧为无线路由器添加Linux功能
  19. 手机PDF文件怎么转为电子书
  20. Nmap学习10 - 对目标主机使用 NSE 脚本

热门文章

  1. 【Python】高级特性 一
  2. 文件的 ContentType 类型大全
  3. 做视频剪辑可以在哪里接单赚钱?
  4. 共享未授予用户计算机登录,win10系统访问局域网共享出现“未授予用户在此计算机上的请求登录类型”如何解决...
  5. 337、用三角形triangle、方形square、圆形circle等“基本图形“来表示任意的 图形 如菱形 半圆
  6. DELL课堂十:设计行业 移动工作站该选谁
  7. 网络基础,带你了解TCP/UDP,轻松理解DNS
  8. Entity Framework 学习
  9. 机器翻译自动评估-BLEU算法详解
  10. 《意大利 Capital 现代边柜》