1、String类
(1)概述:
String类代表字符串,字符串是常量,创建之后不能更改,一旦这个字符串确定了,就会在内存中(堆中的常量池)生成这个字符串,字符串本身不能改变,但变量的地址是能够改变的,字符串的本质是一个字符的数组。
(2)字符串的构建
字符串中有大量的的重载构造方法,通过String类的构造方法可以完成字符穿的构建,还可以通过双引号的方式进行创建对象
两者的是否相同?
package com.oracle.demo02;
public class Demo02 {
public static void main(String[] args) {
String str1="aaabbb";
String str2=new String("aaabbb");
System.out.println(str1==str2);
System.out.println(str1.equals(str2));
}
}
str1创建在内存中只有一个对象
str2创建在内存中有两个对象,一个 new的对象在堆中,一个字符串本身对象,在字符串常量池中
(3)String构造方法
-------------------String()初始化一个新创建的String对象,表示一个空字符序列
例如:String s1 = new String(); //创建String对象,字符串中没有内容
------------------- String(byte[ ] bytes)通过平台使用的默认字符解码指定byte数组,构建新的String
例如:byte[] bys = new byte[]{97,98,99,100};
String s2 = new String(bys);
--------------------String(byte[ ] bytes int offset ,int length )通过平台使用的默认字符解码指定byte子数组,构建新的String
例如:String s3 = new String(bys, 1, 3); //创建String对象,把一部分数组元素作为字符串的内容,参数offset为数组元素的起始索引位置,参数length为要几个元素
--------------------String(char[ ] values) 分配一个新的 String,使其表示字符数组参数中当前包含的字符序列。
例如:
char[] chs = new char[]{’a’,’b’,’c’,’d’,’e’};
String s4 = new String(chs); //创建String对象,把数组元素作为字符串的内容
--------------------分配一个新的 String,它包含取自字符数组参数一个子数组的字符。
例如:
String s5 = new String(chs, 0, 3);//创建String对象,把一部分数组元素作为字符串的内容,参数offset为数组元素的起始索引位置,参数count为要几个元素
(4)String类的方法查找
---------------length()返回字符串的长度
String aaa="abcdefgrthajnsdjkcv";
int b=aaa.length();
System.out.println(b);
----------------------获取部分字符串substring(int beginindex)或者substring(int beginIndex , int endIndex)
---------------------判断是否以xxx为开头starsWith(xxx)返回值为true或false
----------------------判断是否以xxx为结尾endsWith(xxx)返回值为true或false
----------------------判断字符串是否包含另一个字符contains( char s)判断是否包含指定字符串,包含返回true,不包含返回false
String str = "abcde";
int index = str.indexOf(“bcd”); //判断是否包含指定字符串,包含则返回第一次出现该字符串的索引,不包含则返回-1
boolean b2 = str.contains("bcd");//判断是否包含指定字符串,包含返回true,不包含返回false
----------------------- 将字符串转成一个字符数组。或者字节数组。.getBytes()转换成一个数组。toCharArray()转换成一个字符数组
String str = "abcde";
char[] chs = str.toCharArray();
byte[] bytes = str.getBytes();
-------------------------- 判断两个字符串中的内容是否相同equals()
--------------------------判断两个String是否相等,不考虑大小equalsIgnoreCase()
String str = "abcde";
String str2 = "abcde";
String str3 = "hello";
boolean b1 = str.equals(str2);
boolean b2 = str.e/quals(str3);
---------------------------------获取该字符串的内容toString()
public class Demo02 {
public static void main(String[] args) {
String str = new String("hello");
System.out.println( str.toString() );
System.out.println(str);
}
}
还有:
l 判断该字符串的内容是否为空的字符串
l 获取给定的字符,在该字符串中第一次出现的位置
l 获取该字符串中指定位置上的字符
l 把该字符串转换成 小写字符串
l 把该字符串转换成 大写字符串
l 在该字符串中,将给定的旧字符,用新字符替换
l 在该字符串中, 将给定的旧字符串,用新字符串替换
l 去除字符串两端空格,中间的不会去除,返回一个新字符串
public class Demo03 {
public static void main(String[] args) {
String str="hellojavanihaojava.txt";
//求字符串长度
System.out.println(str.length());
//截取字符串
System.out.println(str.substring(3));
System.out.println(str.substring(3,5));
//判断前缀
System.out.println(str.startsWith("b"));
//判断结尾
System.out.println(str.endsWith(".txt"));
//判断一个字符串中是否包含另一个字符串
System.out.println(str.contains("java"));
//返回一个字符串在另一个字符串中第一次出现的索引值
//如果不存在该字符串则返回-1
System.out.println(str.indexOf("5"));
String str1="nihaojava";
//将字符串转为字节数组
byte[] b1=str1.getBytes();
for(int i=0;i
System.out.print(b1[i]+" ");
}
//将字符串转为字符数组
char[] c1=str1.toCharArray();
for(int j=0;j
System.out.print(c1[j]+" ");
}
//判断两个字符串是否内容相同(忽略大小写)
System.out.println(str1.equalsIgnoreCase("NiHaojava"));
}
}
String类方法使用练习
题目一:获取指定字符串中,大写字母、小写字母、数字的个数。
package demo01;
public class Demo03 {
public static void main(String[] args) {
String str="ADSFGbaersg1123125337";
int bigCount = 0; //大写字母的个数
int smallCount = 0; //小写字母的个数
int numberCount = 0; //数字的个数
for (int i=0; i < str.length(); i++) {
char ch = str.charAt(i); //获取指定位置上的字符
if (ch>='A' && ch<='Z') {
bigCount++;
} else if (ch>='a' && ch<='z') {
smallCount++;
} else if (ch>='0' && ch<='9') {
numberCount++;
}
}
System.out.println("大写字母个数:"+bigCount);
System.out.println("小写字母个数:"+smallCount);
System.out.println("数字个数:"+numberCount);
}
}
l 题目二:将字符串中,第一个字母转换成大写,其他字母转换成小写,并打印改变后的字符串。
package demo01;
public class Demo04 {
public static void main(String[] args) {
String str="aA";
//获取第一部分为字符串
String start = str.substring(0,1);
//获取第二部分为字符串
String end = str.substring(1);
//把第一部分字符串转换成大写字母,把第二部分字符串转换成小写字母
String big = start.toUpperCase();
String small = end.toLowerCase();
//把两部分字符串连接在一起,得到一个完整的字符串
System.out.println(big+small);
}
}
l 题目三:查询大字符串中,出现指定小字符串的次数。如“hellojava,nihaojava,javazhenbang”中查询出现“java”的次数。
public static int getCount(String big, String small){
int count = 0; //出现小串的次数
int index = -1;//出现小串的位置
/*
while的循环条件三步骤:
步骤一. big.indexOf(small) 获取小串在大串中出现的位置
步骤二. 把小串出现的位置,赋值给变量index
步骤三. 判断出现的位置是否为-1, 如果位置等于-1,说明大串中已经查询不到小串了;如果位置不等于-1,那么,进行循环,完成次数累加与修改大串的操作
*/
while ((index = big.indexOf(small)) != -1 ){
count++;//出现次数+1
//更改大串内容
big = big.substring(index+1);
}
return count;
}
练习2
用代码演示String类中的以下方法的用法
(1)boolean isEmpty(): 判断字符串是不是空串,如果是空的就返回true
(2)char charAt(int index): 返回索引上的字符
(3)String toLowerCase(): 字符串转成小写
(4)String toUpperCase(): 字符串转成大写
(5)String replace(char oldChar, char newChar): 将字符串中的老字符,替换为新字符
(6)String repalce(String old, String newstr): 将字符串中的老字符串,替换为新字符串
(7)String trim(): 去掉字符串两端空格
public static void main(String[] args) {
//(1)boolean isEmpty(): 判断字符串是不是空串,如果是空的就返回true
String str1=new String();
boolean a=str1.isEmpty();
System.out.println(a);
//(2)char charAt(int index): 返回索引上的字符
String str2="abcde";
char b=str2.charAt(2);
System.out.println(b);
//(3)String toLowerCase(): 字符串转成小写
String str3="ABCDEFG";
String c=str3.toLowerCase();
System.out.println(c);
//(4)String toUpperCase(): 字符串转成大写
System.out.println(c.toUpperCase());
//(5)String repalce(char oldChar, char newChar): 将字符串中的老字符,替换为新字符
String str4="abc";
String d=c.replace("b","s");
System.out.println(d);
//(6)String repalce(String old, String newstr): 将字符串中的老字符串,替换为新字符串
String e=d.replace(d, "falg");
System.out.println(e);
//(7)String trim(): 去掉字符串两端空格
String str5=" ffff ";
System.out.println(str5);
String f=str5.trim();
System.out.println(f);
}//main
}/
2、字符串缓冲区
字符串缓冲区支持可变的字符串,
StringBuffer又称为可变字符序列,它是一个类似于 String 的字符串缓冲区,通过某些方法调用可以改变该序列的长度和内容。
(1)StringBuffer类
StringBuffer方法的使用:
-----------------append():将指定字符串添加到此字符序列
----------------delete(int start,int end)删除从start到end的字符
-----------------insert(int offset ,String str)将str插入该字符串中
-----------------replace(int start ,int end .String str)使用str替换该字符串中从start到end的字符
-----------------reverse()将字符串使用反序取代
-----------------toString()返回此序列中数据的字符串表现形式
创建一个字符串缓冲区对象。用于存储数据。
StringBuffer sb = new StringBuffer();
sb.append("haha"); //添加字符串
sb.insert(2, "it");//在指定位置插入
sb.delete(1, 4);//删除
sb.replace(1, 4, "cast");//替换指定范围内的内容
String str = sb.toString();
练习:int[] arr = {34,12,89,68};将一个int[]中元素转成字符串 格式 [34,12,89,68]
public static String toString_2(int[] arr) {
StringBuffer sb = new StringBuffer();
sb.append("[");
for (int i = 0; i < arr.length; i++) {
if(i!=arr.length-1){
sb.append(arr[i]+",");
}else{
sb.append(arr[i]+"]");
}
}
return sb.toString();
}
StringBuilder类它也是一个可变的字符序列它比 StringBuffer 要快。