Java—字符串
- 字符串
在java中,字符串被作为String类型的对象处理。String类位于java.lang包中,默认情况下,该包被自动导入所有的程序。
创建String对象的方法:
String s1 = "java";
String s2 = new String();
String s3 = new String("Java");
- Java字符串的不变性
String对象创建后不能被修改,是不可变的,所谓的修改其实是创建了新的对象,所指向的内存空间不同。
如果需要一个可以改变的字符串可以使用StringBuffer或者StringBuilder。
每次 new 一个字符串就是产生一个新的对象,即便两个字符串的内容相同,使用 ”==” 比较时也为 ”false” ,如果只需比较内容是否相同,应使用 ”equals()” 方法。
常量池在Java中是用于保存在编译期已确定的、已编译的class文件中的数据。
package cn.test;
public class Demo12 {
public static void main(String[] args) {
String s1 = "java";//先检查字符串常量池中是否有"java"字符串,如果有则直接指向,如果没有就在字符串常量池中添加"java"字符串并指向它,所以这种方式创建字符串时最多创建一个对象,或者不创建对象
String s2 = "java";//s2直接指向字符串常量池中的"java"
String s3 = new String("java");//在堆内存申请一块内存存储字符串"java",s3指向其内存块对象,同时检查字符串常量池中是否有"java"字符串,如果没有就添加字符串"java"到常量池中,所以new String()有可能创建两个对象
String s4 = new String("java");
System.out.println(s1 == s2);
System.out.println(s1 == s3);
System.out.println(s3 == s4);
s1 = "欢迎来到" + s1;
System.out.println(s1);
System.out.println(s3.equals(s4));
}
}
执行结果:
true
false
false
欢迎来到java
true
- String类常用的方法

举例1:
String fileName = "HelloWorld.java";
String email = "xiaoli@163.com"; // 判断.java文件名是否正确:合法的文件名应该以.java结尾
int index = fileName.lastIndexOf('.');
String prefix = fileName.substring(index+1);
if ( index > 0 && prefix.equals("java")) {
System.out.println("Java文件名正确");
} else {
System.out.println("Java文件名无效");
} // 判断邮箱格式是否正确:合法的邮箱名中至少要包含"@", 并且"@"是在"."之前
int index2 = email.indexOf('@');
int index3 = email.indexOf('.');
if (index2 != -1 && index3 > index2) {
System.out.println("邮箱格式正确");
} else {
System.out.println("邮箱格式无效");
}
String str = "boo:and:foo";
String[] arr = str.split(":");
for (int i = 0; i < arr.length; i++)
{
System.out.print(arr[i]);
}
执行结果:
Java文件名正确
邮箱格式正确
booandfoo
举例2:
String str = "abcd阿";
byte[] b = str.getBytes();
for (int j = 0; j < b.length; j++) {
System.out.print("[" + b[j] + "]");
}
运行结果:
[97][98][99][100][-80][-94]
注:1 个字节等于 8 位, gbk 编码中 1 个汉字字符存储需要 2 个字节,1 个英文字符存储需要 1 个字节
示例3:
String s = "aljlkdsflkjsadjfklhasdkjlflkajdflwoiudsafhaasdasd"; // 出现次数
int num = 0; // 循环遍历每个字符,判断是否是字符 a ,如果是,累加次数
for ( int i = 0;i < s.length(); i++ )
{
// 获取每个字符,判断是否是字符a
if ( s.charAt(i) == 'a' ) {
// 累加统计次数
num++;
}
}
System.out.println("字符a出现的次数:" + num);
运行结果:
字符a出现的次数:8
- StringBuilder类
String类具有可变性,频繁操作字符串时会产生很多临时变量,使用StringBuilder或StringBuffer就可以避免这个问题。它们基本相似,不同之处是StringBuffer是线程安全的,所以性能略高。因此,一般情况下创建一个内容可变的字符串对象,优先使用StringBuilder类。
StringBuilder str2 = new StringBuilder("java");
StringBuilder类的常用方法:

注:String str = "a" + s; 其效率与 String str = new StringBuilder().append("a").append(s).toString();是一样的。
关于‘+’的原理,参考:http://blog.csdn.net/zengshunyao/article/details/40023577
Java—字符串的更多相关文章
- Java 字符串格式化详解
Java 字符串格式化详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 文中如有纰漏,欢迎大家留言指出. 在 Java 的 String 类中,可以使用 format() 方法 ...
- (转)Java字符串
转自:http://blog.sina.com.cn/s/blog_899678b90101brz0.html 创建字符串有两种方式:两种内存区域(字符串池,堆)1," " 引号创 ...
- Java字符串split函数的注意事项
Java字符串的split方法可以分割字符串,但和其他语言不太一样,split方法的参数不是单个字符,而是正则表达式,如果输入了竖线(|)这样的字符作为分割字符串,会出现意想不到的结果, 如, Str ...
- 关于java字符串编译优化问题
情景一:不好的字符串拼接习惯 起因是这样的:一个大牛在写了一篇关于java字符串优化问题的讲解,他提到:不要使用strObj+otherValue的方法将otherValue转换为字符串形式,因 ...
- Java字符串排列算法
Java字符串排列算法 题目:现有ABCDE 5个球 构成的排列组合 可重复抽取 最多取到16个 共有多少种组合方式? 比如:取1个球可以构成的组合有 A B C D E 共5种,取2个球可以构成的组 ...
- Java字符串转换
public class StringConvertToInt{ public static void main(String[] args) { String a ="12a34bW()5 ...
- Java字符串null相加
Java字符串null相加 最近和同事讨论了下面的一段代码: String a = null; a += a; System.out.println(a); 运行结果: nullnull 本着学习的态 ...
- JAVA字符串格式化String.format()的使用
JAVA字符串格式化-String.format()的使用常规类型的格式化 String类的format()方法用于创建格式化的字符串以及连接多个字符串对象.熟悉C语言的同学应该记得C语言的sprin ...
- Java字符串的10大热点问题,你都懂吗?
转自 威哥干JAVA http://www.codingke.com 下面我为大家总结了10条Java开发者经常会提的关于Java字符串的问题,如果你也是Java初学者,仔细看看吧: 1.如何比较字符 ...
- java 字符串为空问题
java 字符串为空问题 String testStr = null; System.out.println(testStr); if (testStr == null) { System.out.p ...
随机推荐
- 深浅copy 和 集合
1 对于赋值运算,就是共同指向一个内存地址.将一个值赋予一个变量,那么它的内存地址同时也赋予了他,如果值是不可变类型,改变值,就会产生一个新值和新内存地址,如果值是可变类型那么内存地址不会变. s1 ...
- MATLAB教程
基本操作:https://www.w3cschool.cn/matlab/ MATLAB2018a下载安装教程http://www.zhanshaoyi.com/6938.html
- ansible部署,规划
部署管理服务器 第一步:先检查有没有ssh服务 [root@iZm5eeyc1al5vzh8bo57zyZ ~]# rpm -qf /etc/init.d/sshd openssh-server-5. ...
- 理解 Spring 事务原理
转载:https://www.jianshu.com/p/4312162b1458 一.事务的基本原理 Spring事务的本质其实就是数据库对事务的支持,没有数据库的事务支持,spring是无法提供事 ...
- my02_Atlas mysql5.7安装配置
软件环境:centos7.3,glib-2.49,lua5.1,Atlas2.2.1,mysql5.7 依赖包安装******************************************* ...
- NIOGoodDemo
Java NIO是在jdk1.4开始使用的,它既可以说成“新I/O”,也可以说成非阻塞式I/O.下面是java NIO的工作原理: 1. 由一个专门的线程来处理所有的 IO 事件,并负责分发. 2. ...
- 2019.03.21 读书笔记 基元类型的Parse与TryParse 性能与建议
Parse转换失败时会抛出异常,耗损性能,如果转换成功,则与TryParse无差异.查看源码,tryparse的代码更多一些,在失败时,反而性能更优,主要是抛出异常耗损了性能.所以在不确定是用Tryp ...
- python 利用正则表达的式提取特定数据如手机号
import re file=open('1.txt','r') listfile=file.readlines() listfile=','.join(listfile)#合并文本 listfile ...
- PCB的版本控制
http://club.szlcsc.com/article/details_1783_1.html 转载自:http://www.amobbs.com/thread-5606014-1-1.html ...
- python单元测试框架-unittest(三)之用例执行顺序
执行顺序规则: 测试类或测试方法的数字与字母顺序0~9,A-Z 执行如下脚本,理解用例执行顺序 #coding=utf-8 import unittest class Test1(unittest.T ...