如要转载请标明作者zjrodger和出处:http://blog.youkuaiyun.com/zjrodger/,谢谢。
(·)String类
1
.String类的字符串最大特点
2
.String类对象的“==”和“equals()”方法的应用。
3
.一个对象和两个对象引发的思考——
String对象的内存机制
4
.字符串切割
5
.字符串大小写转换。
(1)用Character类,
逐个转换字符串中的单个字符。
(2)用String类,toUpperCase()和tuLowerCase()方法。
6
.去除字符串首尾两端的多个空格。
7
.去关于
子字符串的一些方法应用。
(·)StringBuffer类
2.什么时候使用StringBuffer
3.StringBuffer的常用方法
(1) 存储
(2) 删除
(3) 修改
(4) 将缓冲区中指定数据存储到指定字符数组中
(·)String和StringBuffer的区别
1. 从值是否可变的角度讲。
2. 从效率的角度讲
(·)StringBuilder类
1. StringBuffer类和StringBuilder类的区别
2. Java API升级的三方面因素
(·)基本数据类型对象包装类
(·)String类和int/float类型之间的相互转换
1. String型转化为
int型或
float型
2. int型或
float型转化为
String类型
|
String s1 = new String("abc");
String s2 = new String("abc");
String s3 = "abc";
String s4 = "abc";
System.out.println("s1 == s2, True or False: "+(s1 == s2));
System.out.println("s1.equals(s2), True or False: "+s1.equals(s2));
System.out.println("s1 == s3, True or False: "+(s1 == s3));
System.out.println("s3 == s4, True or False: "+(s3 == s4));
|
s1 == s2, True or False:
false
s1.equals(s2), True or False:
true
s1 == s3, True or False:
false
s3 == s4, True or False:
true
|
在“
String对象的内存机制”这章中的描述:原来在堆内存中还有块叫"字符串常量池"的专门存放字符串的小区域。String str = new String("java");在堆中创建了一个“java”对象,在字符串常量池中也创建了一个“java”对象。
----------------- 书上原话是: 使用new创建字符串对象的步骤如下。 1. 首先在堆(不是常量池)中创建一个包含指定内容的字符串对象,并将字符串引用指向该对象。 2. 去字符串常量池中查看,是否有包含该内容的对象。 3. 若有,则将new出来的字符串对象与字符串常量池中内容相同的对象联系起来。 4. 若没有,则在字符串常量池中再创建一个包含该内容的字符串对象,并将堆中的对象与字符串常量池中新创建出来的对象联系起来。 ------------ 可以通过 public String intern() 方法来检测:普通堆中的字符串对象 对应的 字符串常量池中的对象。 public String intern() 方法:是将指定字符串对象在字符串常量池中对应对象的引用返回。 --------------- 这样做的目的是为了:提高字符串的比较速度。 书中原话是这样说的: 字符串特殊的内存机制带来的好处,即是:不管字符串多长,其比较速度都是一样的。因为在比较两个字符串内容是否相同时,不必真去考察内容,只需比较两个字符串联系的常量池中对象是否为同一个即可。这也就 将对内容的比较转化为对引用的比较,大大提高了速度。 |
String str1="abc";
String str2="abc";
String str3="abc";
String str4=new String("abc");
String str5=new String("abc");
|
String s1 = "Zhangsan,Lisi,Wangwu";
String[] strSplit = s1.split(",");
for(int i=0; i<strSplit.length; i++){
System.out.println(strSplit[i]);
}
|
Zhangsan
Lisi
Wangwu
|
package com.itheima;
import java.io.*;
/**
* 编写程序,从键盘接收一个字符串,对字符串中的字母进行大小写互转
*(大写字母转成小写,小写字母转成大写)。
*/
public class Test8 {
public static void main(String[] args) {
BufferedReader br = null;
try {
br = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Enter some characters: ");
String content = br.readLine();
System.out.println("You entered: "+content);
System.out.println("The Length of the String: "+content.length());
//下循环的作用:
//1.取出字符串中的每一个字符。
//2.判断给该字符,
//(1)若该字符位于“A--Z”之间,则转化为小写,并输出;
//(2)若该字符位于“a--z”之间,则转化为大写,并输出;
//(3)若该字符即不位于“a--z”之间,也不位于“A--Z”之间,则不对该字符进行任何处理,直接输出。
for(int index=0; index<content.length(); index++) {
char element = content.charAt(index);
if(element>='A' && element<='Z') {
System.out.print(Character.toLowerCase(element));
}
else if(element>='a' && element<='z') {
System.out.print(Character.toUpperCase(element));
}
else {
System.out.print(element);
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
br.close();
} catch (IOException e2) {
e2.printStackTrace();
}
}
}
}
package com.zjrodger;
/**
* 作用:
* //练习一:实现自己的trim()方法,去除字符串两端空格)。
* **/
class MyStringClass{
//练习一:去除字符串两端空格
//(方法一): 将目标String转化成字符数组,再开始寻找。
public static String myTrim01(String stringParam){
char[] charArray = stringParam.toCharArray();
//找到字符串开头部分,空格字符的结束索引。
int leadingSpaceEndIndex = 0;
//找到了字符串开头部分,最后一个空格的index。
int index01=0;
//找到字符串结尾部分,空格字符的开始索引。
int trailingSpaceStartIndex = 0;
//找到了字符串结尾部分,最开始的一个空格的index。
int index02=charArray.length-1;
//开始从前向后,寻找开头部分,最后一个空格的索引值。
while(index01 <= index02 && charArray[index01] == ' '){
++index01;
}
leadingSpaceEndIndex = index01-1;
//开始从后向前,寻找结尾部分,最有一个空格的索引值。
while(index02 >= index01 && charArray[index02] == ' '){
--index02;
}
trailingSpaceStartIndex = index02;
return stringParam.substring(leadingSpaceEndIndex+1, trailingSpaceStartIndex+1);
}
//练习一:去除字符串两端空格
//(方法二): 不用将目标String转化成字符数组,而是使用charAt(int index)方法。
public static String myTrim02(String stringParam){
//找到字符串开头部分,空格字符的结束索引。
int leadingSpaceEndIndex = 0;
//找到字符串结尾部分,空格字符的开始索引。
int trailingSpaceStartIndex = stringParam.length()-1;
//开始从前向后,寻找开头部分,最后一个空格的索引值。
while( (stringParam.charAt(leadingSpaceEndIndex)) ==' ' && leadingSpaceEndIndex<=trailingSpaceStartIndex){
++leadingSpaceEndIndex;
}
//开始从后向前,寻找结尾部分,最有一个空格的索引值。
while((stringParam.charAt(trailingSpaceStartIndex)) ==' ' && leadingSpaceEndIndex<=trailingSpaceStartIndex){
--trailingSpaceStartIndex;
}
return stringParam.substring(leadingSpaceEndIndex, trailingSpaceStartIndex+1);
}
}
public class StringTest01 {
public static void main(String[] args) {
System.out.println("( 123 456 789 )");
String str01 = MyStringClass.myTrim01(" 123 456 789 ");
System.out.println("str01.length = "+str01.length()+" They are:("+str01+")");
String str02 = MyStringClass.myTrim02(" 123 456 789 ");
System.out.println("str02.length = "+str02.length()+" They are:("+str02+")");
}
}
package com.zjrodger;
/**
* 作用:
* 练习二:寻找子字符串在主字符串中出现的次数。
* **/
class MyString{
public static int subStrCount(String mainStr, String subStr){
int counter = 0;
//方法一
// while( (mainStr.indexOf(subStr)) != -1 ){
// mainStr = mainStr.substring( mainStr.indexOf(subStr)+subStr.length(), mainStr.length());
// System.out.println("mainStr = "+mainStr);
// ++counter;
// }
//方法二:好处,不用再截取子字符串了,不会在内存中产生额外的字符串对象。
int fromIndex = 0;
while( (mainStr.indexOf(subStr, fromIndex)) != -1 ){
++counter;
fromIndex = mainStr.indexOf(subStr, fromIndex)+subStr.length();
}
return counter;
}
}
public class MySubStrCount {
public static void main(String[] args) {
String originalStr = "fjfkklsajfdjskkafjkddskkajlfk";
System.out.println("Original String: "+originalStr);
int counter = MyString.subStrCount(originalStr, "kk");
System.out.println("The occurance times of KK = "+counter);
}
}
(4) 将缓冲区中指定数据存储到指定字符数组中
String str = new String("welcome to ");
str += "here";
|
1. String型转化为int型或float型
(1)说明
parseInt(), parseFloat()函数,是由Integer对象和Float对象提供的方法,它可以将其它类型(尤指字符串String类型)的数据转化为对应的Int类型和Float类型。
(2)String类型转化成int/float类型的代码示例:
2.1) 将字符串String转化为int类型的整数
方法一: System.out.println("请输学生年龄:"); String age_string = br.readLine(); int age = Integer.parseInt(age_string); |
方法二: Integer age = Integer.valueOf(age_string); 返回一个Integer类型的实例 |
2.2)将字符串String转化为float类型的整数
方法一: System.out.println("请输体重:"); Float weight = Float.parseFloat(br.readLine()); |
方法二: Float f = Float.valueOf(weight); 返回一个Floatl类型的实例 |
(3) 总结将String型转化为int型或float型的方法:
方法一:Integer/Float.pareseInt/Float(String xxx);
方法二:Integer.valueOf(String xxx);
2. int型或float型转化为String类型
(1)需求环境:
比如生成一个int类型的随机数A,并要将其通过BufferedWriter写入到磁盘上的文件“f:\\a.txt”中去。但由于BufferedWriter中的write()方法的参数只能是char类型或者String类型的,所以在将这个随机数A写入到磁盘之前,必须将这个随机数转化为String类型;
再比如,在上网时,在文本框中输入的数字,一般都是String类型的,都需要程序在后台自动将String类型的转化成整数类型的数据。
(2)具体的转化代码为:
String a = Intger.toString(A);
(3)总结将一个整型转化为字符型所要用到的方法
3.1)用Integer.toString(int a)方法
3.2)在整型后边加上空字符就可以了—+””
3.3)使用String.valueOf(int xxx)方法,可以将整型xxx转化为相应的字符串类型