字符串篇
1.1 认识字符串:
字符串的本质是字符(char)类型数组,在java中则将字符串视为String类的一个实例,也就是程序中的对象。
1.2 String类
由字符所组成的一串文字和符号被称做字符串。例如Hello这个字符串是由H、e、l、l、o这5个字符所组成。在java中字符串不仅仅是字符数组,而且是String 类的一个实例。可以使用String类构造。可以使用下面的方式声明一个字符串的引用名称,并指向一个字符串实例。
String text=”Hello”;
System.out.println(text);
注意:字符串的直接指定必须用””括起来,字符串的每个字符都是使用Unicode字符构造的。在构造一个字符串对象之后,可以在输出(out)中指定字符串对象的引用名称来输出字符串。
字符串的连接在java中使用”+”运算符号,+号本来是加法运算符号,而它被重写(override)可以 直接用于字符串的连接。例如:
String msg=”你好”;
msg =msg+”java”;
System.out.println(msg)
字符串在java中是以String 类的一个实例存在的。每个字符串本身会有几个可操作的方法。
方法 说明
length() 返回字符串的字符长度
equals() 判断原字符串的字符是否等于指定字符串中的字符
toLowerCase() 转换字符串的英文字符为小写
toUpperCase() 转换字符串的英文字符为大写
如果要将输入的字符串转换为整数,浮点数等数据类型,可以使用下面所提供的静态的方法。
方法 说明
Byte.parseByte(String) 把字符串转换为字节
Short.parseShort(String) 把字符串转换为short整数
Integer.parseInt(String) 把字符串转换为 int整数
Long.parseLong(String) 把字符串转换为 long 整数
Float.parseFloat(String) 把字符串转换为 Float 浮点数
Double.parseFloat(String) 把字符串转换为 Double 浮点数
如果指定的字符串无法转换为数据类型的值,则会发出NumberFormatException异常(格式转换异常)。
String str=”abc”;
这样声明看起来像基本数据类型的声明。但String 类并不是 java的基本数据类型。String 类是java.lang下所提供的类。如果以配置对象的角度来声明字符串。如下:
String str=new String(“hello”);
由于字符串的本质是字符数组。所以使用String 类声明字符串。该字符串具有数组索引的性质。
方法 说明
char charAt(int index) 返回指定索引处的字符
int indexOf(int ch) 返回指定字符第一个找到的索引位置
int indexOf(String str) 返回指定字符串第一个找到的索引位置
int lastIndexOf(int ch) 返回指定字符最后一个找到的索引位置
String substring(int beginIndex) 取出指定索引处至字符串尾端的子字符串
String substring(int beginIndex,int endIndex) 取出指定索引范围的子字符串
Char[] toCharArray() 将字符串转换成字符数组
在构造字符串对象时,除了直接在=后使用”” 来指定字符串常数。也可以使用字符数组来构造。例如:
Char[] name={‘H’,’e’,’l’,’l’,’o’};
String str=new String(name);
除了上面介绍的几个方法,还有很多。这里就不一一总结了。应该学会使用API。例如String类还有个endsWith()方法可以判断字符串是不是以指定的字符做为结尾,可以使用这个方法来过滤文件名称
public class FileFilter
{
public static void main(String [] args)
{
String [] filename=
{"bush.jpg","aa.jpg","file.gif","bb.gif"};
System.out.println("过滤jpg文件");
for(int i=0;i<filename.length;i++)
{
if(filename.endsWith("jpg"))
{
System.out.print(filename+" ");
}
}
}
}
1. 3 不可变字符串
在java 中使用字符串最重要的一个规则必须记住,一个字符串对象一旦被创建,它的内容就是固定不变的
String str=”Hello”;
这个声明会创建一个长度为5,内容为Hello的字符串对象,您无法改变这个字符串对象的内容。
String str=”ni”;
str = “nihao”;
不要以为这样就改变了字符串对象的内容
事实上。上面那段代码中产生了两个字符串对象,一个是ni字符串对象,长度为2;一个是nihao字符串对象,长度为5,两个不同的字符串对象。您不不是在ni 字符串后面加上hao字符串,而是让str 引用名称从新引用nihao字符串,而不在引用ni 字符串但ni字符串在内存中还是存在的,只是现在没有被引用。
str(引用名称) → ni
使用=重新指定
→ ni
str(引用名称)→ nihao
java中,使用”=”将 一个字符串对象指定给一个引用名称,其意义是:改变该名称所引用的对象,原来被引用的字符串对象若没有被其他名称引用,就会在适当的时候被Java的垃圾回收机制回收
在java执行时会维护一个String池(pool).对于一些可以共享的字符串对象,会先在String 池查找是否存在相同String 内容(字符相同)。如果有就直接返回,而不是直接创建一个新String 对象,可以减少内存的消耗。如下:
String str1=”Hello”;
String str2=”Hello”;
System.out.println(str1==str2);
返回true;
上面这段代码实质上是指向同一个字符串对象
str1→Hello
str2→Hello
*注意:声明字符串的方式必须是 引用名称=”字符串对象” ,该字符串就会放在String池
中
在java中如果==被使用于两个引用名称时,它是用于比较两个引用名称是否指向同一个对象。
在来看看关于String 的 intern() 方法。来看下API怎么说的:在intern()方法被调用时,如果池中已经存在相同的String 对象(即内容相同),那么会返回池中的字符串对象。如果不存在,调用intern()方法的字符串对象被加入池中,并返回该对象的引用。
String str1=”fly”;
String str2=”weight”;
String str3=”flyweight”;
String str4=null;
str4=str1+str2;
System.out.println(str3==str4);
str4=(str1+str2).intern();
System.out.println(str3==str4);
来分析下上面的代码:在java使用+连接字符串会产生一个新的字符串对象,所以第一次在比较str3==str4结果为false,因为它们引用不同的对象
str1→fly;
str2→weight
str3→flyweight;
str4→flyweight;
使用intern() 方法时会先检查String 池 是否存在字符部分相同字符串对象。如果有就返回,由于intern() 在 String 池 找到了它,所以直接返回。这时候在比较 str3和str4 指向同一个字符串对象。所以结果会是true.
由上面例子也得出一个结论那就是。在java中使用==是比较两个引用名称是否引用同一个对象.不可以用==来比较两个字符串对象的内容是否相同
例如:
String str1=new String(“hello”);
String str2=new String(“hello”);
System.out.println(str1==str2);
结果:false
虽然两个字符串的内容相同。但是产生两个String 实例.str1和str2分别引用不同的实例。所以使用==比较结果会显示false;如果要比较两个字符串对象的内容是否相同,要使用equals()方法
如下:
String str1=new String(“hello”);
String str2=new String(“hello”);
System.out.println(str1.equals(str2));
结果:true
还有一个常见的问题:上面代码产生几个实例?很多人会回答2个,但答案是3个。因为hello 就是一个,它存在于字符串池中。另外2个分别 new 构造出来的String类型对象,分别由str1与 str2 引用,所以总共是3个 String 实例
1. 4 StringBuilder 类
一个String 对象的长度是固定的,不能改变它的内同或者是附加新的字符到String 对象中。您也许会使用+来连接字符串达到附加新字符或字符串的目的。但会产生一个新String 实例。如果程序对这种附加字符串的需求很频繁,会消耗很大资源。
在J2SE 5.0提供StringBuilder 类 ,使用这个类所产生的对象默认会有16字符的长度。您也可以自定初始长度。如果附加的字符超出可容纳的长度,则StringBuilder对象会自动增加长度以容纳被附加的字符。如果有频繁的字符附加的需求,使用StringBuilder会让程序的效率大大提高。
分享到:
相关推荐
在Java编程语言中,`String` 和 `StringBuffer` 都是非常重要的类,它们用于处理字符串数据。虽然它们都实现了字符串操作的功能,但它们之间存在一些重要的区别,这些区别主要体现在性能、线程安全以及可变性等方面...
### Java中的类和对象总结 #### 一、类与对象的概念 在面向对象编程中,类(Class)和对象(Object)是两个核心概念。类是对象的抽象模板,它定义了对象的数据结构(即属性)和行为(即方法)。而对象则是类的具体...
【Java String类常用方法详解与实战】 在Java编程语言中,`String`类是一个非常重要的类,它代表不可变的字符序列。所有的字符串字面值(例如:"abc")都是`String`类的实例。本篇文章将深入探讨`String`类的一些...
### JAVA面向对象基础总结 #### 一、面向对象的基本概念 面向对象编程(Object-Oriented Programming, OOP)是一种程序设计范式,它将数据和处理这些数据的方法组织在一起,形成一个整体——对象(Object)。Java...
在这篇文章中,我们将对Java面向对象编程的基础知识进行总结和解释。面向对象编程(Object-Oriented Programming,OOP)是一种编程范式,它将程序设计看作是对象的交互,对象之间的关系和行为。 一、对象和类 在...
理解如何定义类和创建对象是学习Java的第一步。 2. 常量定义 常量是不可改变的值,可以使用关键字`final`来定义。例如,`final int MAX_VALUE = 100;`表示一个最大值为100的常量。 3. 变量及声明 变量是用来存储...
Java Date 类学习总结 Java Date 类是 Java 语言中用于处理日期和时间的类,可以用来计算某一月份的最大天数、将字符串转化为日期、格式化输出日期时间等。本文将对 Java Date 类的常用方法进行总结。 1. 计算某一...
### Java面向对象总结 #### 学习方法介绍:四问法 - **什么?** 面对一个概念时,首先要明确它是什么。 - **有什么特点?** 掌握其特性,了解它与其他概念的不同之处。 - **怎么用demo?** 通过示例来展示如何实际...
总结起来,Java 中的类和对象封装性是通过类来描述一组具有相同特性和行为的对象,并通过访问控制和方法封装来保护对象的内部状态,提供对外的接口。理解并掌握这一概念对于深入学习Java编程至关重要。
### Java基础学习总结 #### 一、Java基础知识 Java是一种广泛使用的高级编程语言,由Sun Microsystems于1995年发布。它具有平台独立性、安全性高、面向对象等特点,适用于开发各种应用程序。 ##### 1. IO流 IO流...
本篇将基于提供的`String1.java`代码示例,深入探讨如何创建并操作字符串对象。 #### 一、程序概述 `String1.java`程序的主要功能是: 1. 接受用户的输入,并将其存储为字符串。 2. 对该字符串执行两个不同的方法...
### JAVA中的继承学习总结 #### 一、Java中的继承概念 继承是面向对象编程(OOP)的一个核心概念,它使得我们可以定义一个类继承另一个类的字段和方法。这样做的好处是可以减少代码冗余,提高代码复用性。在Java中,...
在Java中,类是具有相同属性和行为的对象的集合。类是一种抽象的概念,而对象则是类的具体实例。本例中的`Student`类就是一个典型的例子。 ### 2. 类的定义 #### 代码示例: ```java public class Student { // ....
Java-Date 类的学习总结 Date 类是 Java 语言中用于处理日期和时间的类别,在实际开发中经常会用到。下面是对 Date 类的学习总结,包括计算某一月份的最大天数、Calendar 和 Date 的转化、把字符串转化为 java.util...
- **类与对象**:掌握类的定义,理解构造方法、成员变量和局部变量的作用域,学习静态属性、静态方法和静态代码块。 - **继承与多态**:学习继承的细节,包括构造方法的调用,以及多态的实现。 **第四阶段:常用...
描述:“string类方法总结,由毕姥爷精心提炼,被誉为学习String类的必读经典。” **知识点详述:** 在Java编程语言中,`String`类是一个极其重要的类,用于处理文本数据。由于其不可变性(即一旦创建后不能改变)...