提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
一、字符串的概述构造方法与直接创建
Java.long.String代表字符串。
API当中说:java程序当中的所有字符串字面值(如“abcd”)都作为此类的实例实现。
其实就是说:程序当中所有双引号字符串,都是String类的对象。(就算没有new,也照样是。)
String字符串的特点
1.其中双引号中的内容永不可变。
2.正是因为字符串不可改变,所以字符串可以共享使用。节省内存。
3.字符串效果上可以相当于char【】字符数组,但是底层原理是byte【】字节数组。
创建字符串常见的3+1种方式
三种构造方法:
1.public String();//小括号留空叫创建一个空白字符串,不含有任何内容。2.public String(char[] array);//根据字符数组的内容来创建对应的字符串。3.public String(byte[] array);//根据字节数组的内容来创建对应的字符串。
一种直接创建:
String str=“内容”。
**注意:不管new不new直接写上双引号就是字符串对象。**系统默认已经new了。
方法构造创建实践
package cn.demo03;
public class string01 {
public static void main(String[] args) {
String str1=new String();//小括号留空,说明字符串什么内容都没有。
System.out.println("第一个字符串:"+str1);
char[] chararray={'a','s','d','f'};
String str2=new String(chararray);
System.out.println("第二个字符串:"+str2);
byte[] bytearray={97,98,99};//ascii码值对应的字符
String str3=new String(bytearray);
System.out.println("第三个字符串:"+str3);
String str="淅淅同学要努力";
System.out.println("第四个字符串:"+str);
}
}
实践结果
二、字符串常量池
常量池概述
程序当中直接写上的双引号字符串就在字符串常量池中。
对于基本类型来说,“”是进行数字的比较;
对于引用类型来说,“”是进行地址值的比较。
字符串常量池在堆当中的一个区域,字符串对象写入代表的是地址值。当写入字符串内容一样时存储位置相同,地址值也相同,都在常量池当中。
而new的不在常量池当中,所代表的是各自的地址值。
常量池实践
package cn.demo03;
public class string02 {
public static void main(String[] args) {
String str1="abc";
String str2="abc";
char[] chararray= {'a','b','c'};
String str3=new String(chararray);
char[] chararray1= {'a','b','c'};
String str4=new String(chararray1);
System.out.println(str1==str2);//true说明12地址值一样
System.out.println(str1==str3);//false
System.out.println(str2==str3);//false
System.out.println(str4==str3);//false
}
}
实践结果
三、字符串的比较相关方法
比较方法概述
==是进行字符串的地址比较,如果确实是需要字符串的内容比较可以使用两个方法;
1.public boolean equals(Object obj);参数可以是任何对象。
2.a.equalsIgnoreCase(b);忽略a和b大小写差别进行比较。
**备注:**任何对象都能用Object进行接收。
注意事项
1.任何对象都能用Object进行接收;
2.equals方法具有对称性,也就是a.equals(b)和b.equals(a)效果一样;
3.如果比较双方一个常量一个变量,推荐把常量字符串写在前面。
推荐:“abc”.equals(str);
**不推荐:**str.equals(“abc”);
因为如果str=null时也就是不予以赋值,此时推荐方式输出false值,而不推荐方式会报错,出现空指针异常。
比较实践
package cn.demo03;
public class string03 {
public static void main(String[] args) {
String str1="hello";
String str2="hello";
char[] chararray={'h','e','l','l','o'};
String str3=new String(chararray);
System.out.println(str1.equals(str2));//根据12内容进行比较
System.out.println(str1.equals(str3));
System.out.println(str2.equals(str3));
System.out.println(str2.equals("hello"));
System.out.println("hello".equals(str3));
}
}
实践结果
四、字符串获取方法
方法概述
String当中与获取相关的常用方法有:
1.public int length();获取字符串当中含有字符个数,得到字符串长度。2.public String concat(String str);将当前字符串和参数字符串拼接成为返回值新的字符串与用+等价。
3.public charAt(int index);获取指定索引位置的单个字符(索引从0开始)。4.public indexof(String str);查找参数字符串在本字符串当中的首次出现的索引位置,如果没有就返回-1值。
方法实践
package cn.demo03;
public class string04 {
public static void main(String[] args) {
int length = "aqhfioewoqcdwaqv".length();
System.out.println("字符串的长度是:"+length);
String str1="hello";
String str2=" world";
String str3=str1.concat(str2);
System.out.println(str1);
System.out.println(str2);
System.out.println(str3);
char ch="hello".charAt(1);
System.out.println("在1号索引位置的字符是:"+ch);
String original="hello world";
int index=original.indexOf("llo");
System.out.println("索引值是:"+index);
}
}
实践结果
五、字符串当中的截取方法
方法概述
public String substring(int index);从参数位置一直到字符串末尾,返回新字符串。
public String substring(int begin,int end);截取从begin开始一直到end结束的一段字符串,是左闭右开区间,包含左边不包含右边。
方法实践
package cn.demo03;
public class string05 {
public static void main(String[] args) {
String str1="hello world!";
String str2=str1.substring(6);
System.out.println(str1);
System.out.println(str2);
String str3=str1.substring(6,12);
System.out.println(str3);
}
}
实践结果
六、字符串的转换相关方法
方法概述
常用方法:
public char[] toCharArray();将当前字符串拆分成为字符数组作为返回值。public byte[] getBytes();获得当前字符串底层的字节数组也就是阿斯克码值。public String replace(charSequence oldString,charSequence newString);将所有出现的老字符串替换成新的并返回值为新的。
**备注:**charSequence意思就是可以接收字符串类型。
方法实践
package cn.demo03;
public class string06 {
public static void main(String[] args) {
char[] chars="hello".toCharArray();
System.out.println(chars[1]);//将字符串转换为字符数组之后取第一号位元素e
byte[] bytes="ab".getBytes();
for (int i = 0; i < bytes.length; i++) {
System.out.println(bytes[i]);
}
String str1="what's the matter?";
String str2=str1.replace("t","*");//把t换成*
System.out.println(str1);
System.out.println(str2);
}
}
实践结果
七、字符串的分割方法
方法概述
public String[] split(String regex);按照参数的规则,将字符串分为若干个部分。
注意事项
split方法的参数其实是一个“正则表达式”,今后要注意如果按照英文句点“.”进行切分,必须写“\.”(两个反斜杠)
方法实践
package cn.demo03;
public class string07 {
public static void main(String[] args) {
String str1="aaa,bbb,ccc,ddd";
String[] array1= str1.split(",");
for (int i = 0; i < array1.length; i++) {
System.out.println(array1[i]);
}
String str2="aaa.bbb.ccc ";
String[] array2= str2.split("\\.");
for (int i = 0; i < array2.length; i++) {
System.out.println(array2[i]);
}
}
}
实践结果
八、练习题1:
题目:
定义一个方法,把数组{1,2,3}按照指定格式拼接成一个字符串。
格式参照如下:【word1#word2#word3】。
分析:
1.首先准备一个int[]数组,内容是:1,2,3。
2.定义一个方法,用来将数组变成字符串。
三要素:
返回值类型:String
方法名称:fromArrayToString
参数列表:int[]。
3.格式:【word1#word2#word3】用到;for循环、字符串拼接、每个数组元素之前都有一个word字样、分割使用的是#、区分一下是不是最后一个。
4.调用方法:得到返回值,并打印结果字符串。
代码:
package cn.demo03;
public class stringtext1 {
public static void main(String[] args) {
int array[]={1,2,3};
String result=fromArrayToString(array);
System.out.println(result);
}
public static String fromArrayToString(int[] array){
String str="[";
for (int i = 0; i < array.length; i++) {
if(i==array.length-1){
str+="word"+array[i]+"]";
}else{
str+="word"+array[i]+"#";//加对于字符串来说不是累加,是在原有的字符串中往里面拼接一些内容
}
}
return str;
}
}
运行结果:
九、练习题2:
题目:
键盘输入一个字符串并统计其各种字符出现的次数。种类有:大写字母、小写字母、数字、其他。
思路:
1.既然用到键盘输入,肯定是scanner。
2.键盘输入的是字符串,那么,String str=sc.next();
3.定义四个变量,分别代表四种字符各自出现的次数。
4.需要对字符串一个字、一个字检查。String–>char[],方法就是toCharArray();
5.遍历char[]字符数组,对于当前字符种类进行判断,并且用四个变量进行++。
6.打印输出四个变量,分别代表四种字符出现的的次数。
代码:
package cn.demo03;
import java.util.Scanner;
public class stringtext2 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入一个字符串:");
String input=sc.next();//获取键盘输入放入一个字符串
int big=0;//大写字母
int small=0;//小写字母
int charter=0;//数字
int other=0;//其他字符符号什么的
char[] chararray=input.toCharArray();
for (int i = 0; i < chararray.length; i++) {
char ch=chararray[i];//当前单个字符
if('A'<=ch&&ch<='Z'){
big++;
}else if('a'<=ch&&ch<='z'){
small++;
}else if('0'<=ch&&ch<='9'){
charter++;
}else{
other++;
}
}
System.out.println("大写字母个数:"+big);
System.out.println("小写字母个数:"+small);
System.out.println("数字个数:"+charter);
System.out.println("其他字符个数:"+other);
}
}