字符串:
字符串是常量,值在创建之后就不能更改,一旦字符串确定,在内存区域中就会生成这个字符串,字符串本身不会改变,但存储它地址的变量的地址值可以改变,字符串的本质是一个字符的数组,一旦赋值,终身不变。
" "是java中唯一一个不需要new就可以创建的对象,它就相当于一个对象,相当于new String。
通过new方式创建的对象与""的对象的不同:
String s3 = "abc";
String s4 = new String("abc");
System.out.println(s3==s4);//false
System.out.println(s3.equals(s4));//true,
在堆里面有一个常量池,char数组进常量池,但是常量池有一个特点,一旦发现一个一模一样的char数组组合方式,则不会在开辟内存,所以通过new的在常量池外边的堆内存中,所以s4存储的是s3的地址值,但是堆又分配给他一个新的地址值,所以s3==s4不相等,因为地址值不同,所以s3只有一个对象,而s4在内存中有2个对象,一个new的对象在堆中,一个字符串本身对象,在字符串常量池中。
String s5="qq"+"123";则会有3个对象。
String类构造方法:
字节数组转字符串:
public class Demo02 {
public static void main(String[] args) {
byte bytes[]={66,67,68,69};
byte bytes[] = { -34, -67, -68, -20 };
字节数组转字符串 如果字节是正数,走的是ASCII码表,从0-127,则数字48代表字符 ' 0 ',数字65代表 ' A ' ,97代表 ' a ' 。
数字0-9是由ASCII码48-57
大写字母A-Z是由ASCII码65-90
小写字母a-z是由ASCII码97-122
字节是负数,走的是系统默认码表,GBK中文码表,一个汉字2个字节
String s = new String(bytes);
System.out.println(s);
String s2=new String(bytes,1,2); 表示的是从byte的数组的下标1开始,转2个字节。
System.out.println(s2);
字符数组转字符串
char[] ch={'你','a','0','好'};
String s3=new String(ch);
System.out.println(s3);
String s4=new String(ch,2,2);
System.out.println(s4);
}
}
String成员方法:
获取字符串长度
String str = "abcde";
int len = str.length();
System.out.println("len="+len);
截取字符串:
String str = "abcde";
String s1 = str.substring(1); //返回一个新字符串,内容为指定位置开始到字符串末尾的所有字符
String s2 = str.substring(2, 4);//返回一个新字符串,内容为指定位置开始到指定位置结束所有字符(包头不包尾,包含2不包含4)
System.out.println("s1="+s1);
System.out.println("s2="+s2);
查找字符串:
当我们判断文件是以java结尾,还是txt结尾时,多用endWith()方法。
String str = "java你好,你好java,hellojava";
// 判断字符串是否以java开头
boolean f1 = str.startsWith("java"); 不限定"个数"
System.out.println(f1);
boolean f2 = str.endsWith(".java");
System.out.println(f2);
字符串中是否包含另一个字符串:
// 判断大字符串str中是否含有传入的小字符串
boolean f3 = str.contains("你好");
System.out.println("是否包含你好:" + f3);
// 获取java在字符串中第一次出现的索引值
int index = str.indexOf("java");
System.out.println("java第一次现的下标:" + index); 有就返回下标,没有就返回-1.
将字符串转为字节数组,或字符数组。
// 将字符串转为字节数组
byte[] bytes = str.getBytes();
for (int i = 0; i < bytes.length; i++) {
System.out.print(bytes[i] + " ");
}
System.out.println();
//将字符串转为字符数组
char[] ch = str.toCharArray();
for (int i = 0; i < bytes.length; i++) {
System.out.print(ch);
}
判断2个字符串内容是否相等:
System.out.println("abc".equals("ABC")); 两个字符串直接比较,因为"abc"是对象,可以直接调用方法
System.out.println("abc".equalsIgnoreCase("ABC")); 忽略大小写比较
三个习题:
1:获取指定字符串中,大写字母、小写字母、数字的个数:
package com.oracle.demo01;
public class Demo01 {
public static void main(String[] args) {
String str="javahello,HelloJava123";
字符串转字符数组
char[] ch=str.toCharArray();
定义三个计数器
int big=0;
int small=0;
int number=0;
//遍历数组
for(int i=0;i<ch.length;i++){
//判断是否为大写字母
if(ch[i]>=65&&ch[i]<=90){
big++;
}else if(ch[i]>=97&&ch[i]<=122){
small++;
}else if(ch[i]>=48&&ch[i]<=57){
number++;
}
}
System.out.println("大写字母:"+big);
System.out.println("小写字母:"+small);
System.out.println("数字:"+number);
}
}
2:将字符串中,第一个字母转换成大写,其他字母转换成小写,并打印改变后的字符串。
package com.oracle.demo01;
public class Zuoye3 {
public static void main(String[] args) {
String str="Hello";
String start=str.substring(0,1);
String end=str.substring(1);
String big=end.toUpperCase();
String small=start.toLowerCase();
String ss=small+big;
System.out.println(ss);
}
}
3:查询大字符串中,出现指定小字符串的次数。
package com.oracle.demo01;
public class Demo02 {
public static void main(String[] args) {
String str = "hellojava,nihaojava,javazhenbang";
int num=0;
int index=str.indexOf("java");
while(index!=-1){
num++;
str=str.substring(index+"java".length());
index=str.indexOf("java");
}
System.out.println(num);
}
}