- 浏览: 313536 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
opalescent_:
学习了。。
java笔试题的整理和解答扩展(String专题) -
yixiao258964:
谢谢,找了好久Reverse Enginee,都说在datab ...
PowerDesigner Reverse Engineer from database-mysql -
javaAlpha:
介绍的真全啊
Java编程那些事儿86——文件操作之File类使用
Java编程那些事儿75——String类使用
陈跃峰
出自:http://blog.csdn.net/mailbomb
9.5.3 String和StringBuffer
String和StringBuffer类都是代表字符串,也就是任意多个字符组成的序列。程序需要存储的大量文字一般都使用字符串进行代表。在这两个类中,包含了大部分关于字符串操作的方法,在实际操作字符串时,可以首先查阅这两个类中的方法。
String和StringBuffer虽然都代表字符串,但是由于两个类内部实现的区别,所以一般把String看成不可变字符串,而把StringBuffer看成可变字符串,对于String的每次改变(例如字符串连接等)都会生成一个新的字符串,比较浪费内存,而StringBuffer每次都改变自身,不生成新的对象,比较节约内存。
下面就详细介绍一下String和StringBuffer的实际使用。
9.5.3.1 String类
1、String对象的初始化
由于String对象特别常用,所以在对String对象进行初始化时,Java提供了一种简化的特殊语法,格式如下:
String s = “abc”;
s = “Java语言”;
其实按照面向对象的标准语法,其格式应该为:
String s = new String(“abc”);
s = new String(“Java语言”);
只是按照面向对象的标准语法,在内存使用上存在比较大的浪费。例如String s = new String(“abc”);实际上创建了两个String对象,一个是”abc”对象,存储在常量空间中,一个是使用new关键字为对象s申请的空间。
其它的构造方法的参数,可以参看String类的API文档。
2、字符串的常见操作
a、charAt方法
该方法的作用是按照索引值(规定字符串中第一个字符的索引值是0,第二个字符的索引值是1,依次类推),获得字符串中的指定字符。例如:
String s = “abc”;
char c = s.chatAt(1);
则变量c的值是’b’。
b、compareTo方法
该方法的作用是比较两个字符串的大小,比较的原理是依次比较每个字符的字符编码。首先比较两个字符串的第一个字符,如果第一个字符串的字符编码大于第二个的字符串的字符编码,则返回大于0的值,如果小于则返回小于0的值,如果相等则比较后续的字符,如果两个字符串中的字符编码完全相同则返回0。
例如:
String s = “abc”;
String s1 = “abd”;
int value = s.compareTo(s1);
则value的值是小于0的值,即-1。
在String类中还存在一个类似的方法compareToIgnoreCase,这个方法是忽略字符的大小写进行比较,比较的规则和compareTo一样。例如:
String s = “aBc”;
String s1 = “ABC”;
int value = s. compareToIgnoreCase (s1);
则value的值是0,即两个字符串相等。
c、concat方法
该方法的作用是进行字符串的连接,将两个字符串连接以后形成一个新的字符串。例如:
String s = “abc”;
String s1 = “def”;
String s2 = s.concat(s1);
则连接以后生成的新字符串s2的值是”abcdef”,而字符串s和s1的值不发生改变。如果需要连接多个字符串,可以使用如下方法:
String s = “abc”;
String s1 = “def”;
String s2 = “1234”;
String s3 = s.concat(s1).concat(s2);
则生成的新字符串s3的值为”abcdef1234”。
其实在实际使用时,语法上提供了一种更简单的形式,就是使用“+”进行字符串的连接。例如:
String s = “abc” + “1234”;
则字符串s的值是”abc1234”,这样书写更加简单直观。
而且使用“+”进行连接,不仅可以连接字符串,也可以连接其他类型。但是要求进行连接时至少有一个参与连接的内容是字符串类型。而且“+”匹配的顺序是从左向右,如果两边连接的内容都是基本数字类型则按照加法运算,如果参与连接的内容有一个是字符串才按照字符串进行连接。
例如:
int a = 10;
String s = “123” + a + 5;
则连接以后字符串s的值是“123105”,计算的过程为首先连接字符串”123”和变量a的值,生成字符串”12310”,然后使用该字符串再和数字5进行连接生成最终的结果。
而如下代码:
int a = 10;
String s = a + 5 + “123”;
则连接以后字符串s的值是”15123”,计算的过程为首先计算a和数字5,由于都是数字型则进行加法运算或者数字值15,然后再使用数字值15和字符串”123”进行连接获得最终的结果。
而下面的连接代码是错误的:
int a = 12;
String s = a + 5 + ‘s’;
因为参与连接的没有一个字符串,则计算出来的结果是数字值,在赋值时无法将一个数字值赋值给字符串s。
d、endsWith方法
该方法的作用是判断字符串是否以某个字符串结尾,如果以对应的字符串结尾,则返回true。
例如:
String s = “student.doc”;
boolean b = s.endsWith(“doc”);
则变量b的值是true。
e、equals方法
该方法的作用是判断两个字符串对象的内容是否相同。如果相同则返回true,否则返回false。例如:
String s = “abc”;
String s1 = new String(“abc”);
boolean b = s.equals(s1);
而使用“==”比较的是两个对象在内存中存储的地址是否一样。例如上面的代码中,如果判断:
boolean b = (s == s1);
则变量b的值是false,因为s对象对应的地址是”abc”的地址,而s1使用new关键字申请新的内存,所以内存地址和s的”abc”的地址不一样,所以获得的值是false。
在String类中存在一个类似的方法equalsIgnoreCase,该方法的作用是忽略大小写比较两个字符串的内容是否相同。例如:
String s = “abc”;
String s1 =”ABC”;
boolean b = s. equalsIgnoreCase (s1);
则变量b的值是true。
f、getBytes方法
该方法的作用是将字符串转换为对应的byte数组,从而便于数据的存储和传输。例如:
String s = “计算机”;
byte[] b = s.getBytes(); //使用本机默认的字符串转换为byte数组
byte[] b = s.getBytes(“gb2312”); //使用gb2312字符集转换为byte数组
在实际转换时,一定要注意字符集的问题,否则中文在转换时将会出现问题。
g、indexOf方法
该方法的作用是查找特定字符或字符串在当前字符串中的起始位置,如果不存在则返回-1。例如:
String s = “abcded”;
int index = s.indexOf(‘d’);
int index1 = s.indexOf(‘h’);
则返回字符d在字符串s中第一次出现的位置,数值为3。由于字符h在字符串s中不存在,则index1的值是-1。
当然,也可以从特定位置以后查找对应的字符,例如:
int index = s.indexOf(‘d’,4);
则查找字符串s中从索引值4(包括4)以后的字符中第一个出现的字符d,则index的值是5。
由于indexOf是重载的,也可以查找特定字符串在当前字符串中出现的起始位置,使用方式和查找字符的方式一样。
另外一个类似的方法是lastIndexOf方法,其作用是从字符串的末尾开始向前查找第一次出现的规定的字符或字符串,例如:
String s = “abcded”;
int index = s. lastIndexOf(‘d’);
则index的值是5。
h、length方法
该方法的作用是返回字符串的长度,也就是返回字符串中字符的个数。中文字符也是一个字符。例如:
String s = “abc”;
String s1 = “Java语言”;
int len = s.length();
int len1 = s1.length();
则变量len的值是3,变量len1的值是6。
i、replace方法
该方法的作用是替换字符串中所有指定的字符,然后生成一个新的字符串。经过该方法调用以后,原来的字符串不发生改变。例如:
String s = “abcat”;
String s1 = s.replace(‘a’,’1’);
该代码的作用是将字符串s中所有的字符a替换成字符1,生成的新字符串s1的值是”1bc1t”,而字符串s的内容不发生改变。
如果需要将字符串中某个指定的字符串替换为其它字符串,则可以使用replaceAll方法,例如:
String s = “abatbac”;
String s1 = s.replaceAll(“ba”,”12”);
该代码的作用是将字符串s中所有的字符串”ab”替换为”12”,生成新的字符串”a12t12c”,而字符串s的内容也不发生改变。
如果只需要替换第一个出现的指定字符串时,可以使用replaceFirst方法,例如:
String s = “abatbac”;
String s1 = s. replaceFirst (“ba”,”12”);
该代码的作用是只将字符串s中第一次出现的字符串”ab”替换为字符串”12”,则字符串s1的值是”a12tbac”,字符串s的内容也不发生改变。
j、split方法
该方法的作用是以特定的字符串作为间隔,拆分当前字符串的内容,一般拆分以后会获得一个字符串数组。例如:
String s = “ab,12,df”;
String s1[] = s.split(“,”);
该代码的作用是以字符串”,”作为间隔,拆分字符串s,从而得到拆分以后的字符串数字s1,其内容为:{“ab”,”12”,”df”}。
该方法是解析字符串的基础方法。
如果字符串中在内部存在和间隔字符串相同的内容时将拆除空字符串,尾部的空字符串会被忽略掉。例如:
String s = “abbcbtbb”;
String s1[] = s.split(“b”);
则拆分出的结果字符串数组s1的内容为:{“a”,””,”c”,”t”}。拆分出的中间的空字符串的数量等于中间间隔字符串的数量减一个。例如:
String s = “abbbcbtbbb”;
String s1[] = s.split(“b”);
则拆分出的结果是:{“a”,””,””,”c”,”t”}。最后的空字符串不论有多少个,都会被忽略。
如果需要限定拆分以后的字符串数量,则可以使用另外一个split方法,例如:
String s = “abcbtb1”;
String s1[] = s.split(“b”,2);
该代码的作用是将字符串s最多拆分成包含2个字符串数组。则结果为:{“a”,”cbtb1”}。
如果第二个参数为负数,则拆分出尽可能多的字符串,包括尾部的空字符串也将被保留。
k、startsWith方法
该方法的作用和endsWith方法类似,只是该方法是判断字符串是否以某个字符串作为开始。例如:
String s = “TestGame”;
boolean b = s.startsWith(“Test”);
则变量b的值是true。
l、substring方法
该方法的作用是取字符串中的“子串”,所谓“子串”即字符串中的一部分。例如“23”是字符串“123”的子串。
字符串“123”的子串一共有6个:”1”、”2”、”3”、”12”、”23”、”123”。而”32”不是字符串”123”的子串。
例如:
String s = “Test”;
String s1 = s.substring(2);
则该代码的作用是取字符串s中索引值为2(包括)以后的所有字符作为子串,则字符串s1的值是”st”。
如果数字的值和字符串的长度相同,则返回空字符串。例如:
String s = “Test”;
String s1 = s.substring(4);
则字符串s1的值是””。
如果需要取字符串内部的一部分,则可以使用带2个参数的substring方法,例如:
String s = “TestString”;
String s1 = s.substring(2,5);
则该代码的作用是取字符串s中从索引值2(包括)开始,到索引值5(不包括)的部分作为子串,则字符串s1的值是”stS”。
下面是一个简单的应用代码,该代码的作用是输出任意一个字符串的所有子串。代码如下:
String s = “子串示例”;
int len = s.length(); //获得字符串长度
for(int begin = 0;begin < len – 1;begin++){ //起始索引值
for(int end = begin + 1;end <= len;end++){ //结束索引值
System.out.println(s.substring(begin,end));
}
}
在该代码中,循环变量begin代表需要获得的子串的起始索引值,其变化的区间从第一个字符的索引值0到倒数第二个字符串的索引值len -2,而end代表需要获得的子串的结束索引值,其变化的区间从起始索引值的后续一个到字符串长度。通过循环的嵌套,可以遍历字符串中的所有子串。
m、toCharArray方法
该方法的作用和getBytes方法类似,即将字符串转换为对应的char数组。例如:
String s = “abc”;
char[] c = s.toCharArray();
则字符数组c的值为:{‘a’,’b’,’c’}。
n、toLowerCase方法
该方法的作用是将字符串中所有大写字符都转换为小写。例如:
String s = “AbC123”;
String s1 = s.toLowerCase();
则字符串s1的值是”abc123”,而字符串s的值不变。
类似的方法是toUpperCase,该方法的作用是将字符串中的小写字符转换为对应的大写字符。例如:
String s = “AbC123”;
String s1 = s. toUpperCase ();
则字符串s1的值是”ABC123”,而字符串s的值也不变。
o、trim方法
该方法的作用是去掉字符串开始和结尾的所有空格,然后形成一个新的字符串。该方法不去掉字符串中间的空格。例如:
String s = “ abc abc 123 “;</sp
发表评论
-
Java编程那些事儿37—for语句语法
2008-06-17 11:53 731Java编程那些事儿37—for语句语法 郑州游戏学院 陈跃 ... -
Java编程那些事儿38—break和continue语句
2008-06-18 15:01 781Java编程那些事儿38—break和continue语句 ... -
Java编程那些事儿39—流程控制综合示例1
2008-06-19 12:30 795Java编程那些事儿39—流程控制综合示例1 郑州游戏学院陈 ... -
Java编程那些事儿40—流程控制综合示例2
2008-06-19 20:23 891Java编程那些事儿40—流程控制综合示例2 郑州游戏学院陈 ... -
Java编程那些事儿41—流程控制综合示例3
2008-06-20 18:06 702<meta http-equiv="Conte ... -
Java编程那些事儿42—流程控制综合练习
2008-06-20 22:13 809Java编程那些事儿42—流程控制综合练习 郑州游戏学院 陈 ... -
Java编程那些事儿57—面向对象基础
2008-07-28 14:15 776Java编程那些事儿57—面向对象基础 郑州游戏学院 陈跃峰 ... -
Java编程那些事儿58—类(一)
2008-07-29 11:05 712Java编程那些事儿58—类(一) 郑州游戏学院 陈跃峰 ... -
Java编程那些事儿59——类(二)
2008-08-04 23:36 696Java编程那些事儿59——类(二) 郑州游戏学院 陈跃峰 ... -
Java编程那些事儿60——对象
2008-08-18 23:49 632Java编程那些事儿60—— ... -
Java编程那些事儿61—面向对象设计方法和面向对象特性(一)
2008-08-29 21:42 755Java编程那些事儿61—面向对象设计方法 郑州游戏学院 陈 ... -
Java编程那些事儿62——继承(二)
2008-09-08 12:11 820Java编程那些事儿62——继承(二) 郑州游戏学院 ... -
Java编程那些事儿63—多态性
2008-09-27 10:31 752Java编程那些事儿63—多态性 郑州游戏学院 陈跃峰 出 ... -
Java编程那些事儿64——访问控制符、修饰符和其它关键字
2008-10-14 14:12 797<meta http-equiv="Conte ... -
Java编程那些事儿65——static修饰符
2008-10-23 15:46 824Java编程那些事儿65——static修饰符 郑州游戏学院 ... -
Java编程那些事儿66——final修饰符
2008-11-11 17:19 729Java编程那些事儿66——f ... -
Java编程那些事儿67——this和super
2008-11-12 12:25 968Java编程那些事儿67——this和super 陈跃峰 ... -
Java编程那些事儿68——抽象类和接口(一)
2008-12-22 11:31 756Java编程那些事儿68—— ... -
Java编程那些事儿69——抽象类和接口(二)
2008-12-27 16:25 980Java编程那些事儿69——抽象类和接口(二) 陈跃峰 ... -
Java编程那些事儿70——抽象类和接口(三)
2009-01-05 14:20 1191Java编程那些事儿70—— ...
相关推荐
《Java编程那些事儿》是陈跃峰先生的一本关于Java编程技术的著作,该书深入浅出地介绍了Java编程中的重要概念和实践技巧。这里我们主要聚焦于压缩包中的部分内容,涉及Java集合框架、时间日期处理、文件操作、多线程...
String过滤敏感字
根据提供的信息,我们可以总结出这份Java基础String类选择题练习题主要聚焦于String及StringBuffer类的使用。尽管具体的题目内容未给出,但从所展示的信息中可以推断出该练习题集涵盖了以下几方面的知识点: ### 一...
Java 8 函数式编程 Java 8 函数式编程是指在 Java 8 中引入的一种新的编程范式,它强加了额外的约束,即所有数据必须是不可变的,设置一次,永不改变。函数式编程将值传递给函数,该函数然后生成新值但从不修改...
《零点起飞学C之文本处理——string类详解》 在C++编程中,文本处理是一项基础且重要的任务,而C++中的`std::string`类则是处理文本数据的得力工具。`string`类提供了丰富的功能,使得操作字符串变得更加方便和安全...
Java全能学习面试手册——Java面试题库.zip 01 7道消息队列ActiveMQ面试题!.pdf 02 10道Java高级必备的Netty面试题!.pdf 03 10道Java面试必备的设计模式面试题!.pdf 04 10个Java经典的List面试题!.pdf 05 10个...
Java元数据——Class类 Java中的元数据Class类是一个基础的概念,它代理了这个类的类型信息、方法签名、属性等信息。每个类都有一个Class对象,它用来创建这个类的所有对象。每个对象的创建都依赖于Class对象的创建...
在Java编程中,类加载器(ClassLoader)扮演着至关重要的角色,它负责将类的.class文件加载到Java虚拟机(JVM)中,使程序得以运行。从JDK 2.0开始,Java引入了一种特殊的类加载策略——父亲委托机制,这一机制保证...
在Java编程语言中,`java.lang.String`是最重要的类之一,它是所有字符串操作的基础。这个类位于核心类库中,因此无需显式导入即可使用。本文将深入探讨`String`类的一些关键知识点,包括它的特性、构造方法、常用...
【Java面试之——代码与编程题】是Java程序员在求职过程中常常遇到的面试环节,主要考察应聘者对Java语言的理解和实际操作能力。面试中,面试官可能会提出各种类型的编程题目,包括但不限于设计模式、继承机制、内部...
Java提供了多种方式来创建字符串,例如使用字符串字面量、使用String类的构造方法等。Java也提供了多种方式来比较字符串,例如使用equals()方法、compareTo()方法等。 Java中的字符串替换可以使用replaceAll()方法...
### Java编程的逻辑 #### 一、概述 《Java编程的逻辑》由马俊昌撰写,本书主要聚焦于Java编程的核心概念与技术要点,适用于Java 5及更高版本的开发者。书中不仅涵盖了Java语言的基础知识,还深入探讨了近年来Java...
Java 中的 String 类是 Java 编程语言中最基本的类之一,用于表示字符串。它在 java.lang 包中,是所有 Java 程序的默认一部分。String 类是不可变的,这意味着一旦创建了 String 对象,就不能更改它所包含的字符...
在Java编程中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于前后端数据传输。当你从服务器接收到一个JSON格式的字符串,可能需要将其转换为Java对象以便于处理。这个过程通常称为反序列化...
Java String 使用详解是 Java 编程语言中最基础也是最重要的一部分,对于 Java 程序员来说,了解 String 类的使用方法是必不可少的。本文将详细介绍 Java String 的使用方法,包括 String 对象的初始化、字符串的...
在C++编程中,"数据结构学习——我的string类"是一个典型的任务,旨在帮助初学者理解数据结构的基本概念,并通过实现自定义的string类来深化对C++的理解。下面将详细讨论这个主题,以及相关的知识点。 首先,让我们...
ajax 与 java 之间使用 json 交换数据,JSON到Java 对象的转换,Java对象到JSON的转换。 JSONObject object=new JSONObject(javaBean); String jsonStr=object.toString();
在Java编程语言中,String类是一个非常基础且重要的部分,它是不可变的,也就是说一旦创建了一个String对象,就...在实际编程中,虽然我们通常使用内置的String类,但这种实践性的学习方式无疑能加深对Java编程的理解。
了解了Java类的基本组成部分以及如何定义类、使用类的属性、方法和构造函数等内容后,可以更好地理解和编写Java程序。此外,掌握了这些基础知识后,还可以进一步学习面向对象编程的高级特性,如继承、多态等。