下面是关于String类1相关的知识点
关于Java JDK 中内置的一个类: java. lang. String
1、String表示字符串类型,属于引用数据类型,不属于基本数据类型。
2、在java 中随便使用双引号括起来的都是String对象。例如: “abc”,“def” , “hello world!” ,这是3个String对象。
3、java中规定,双引号括起来的子符串,是不可变的,也就是说"abc"自出生到最终死亡,不可变,不能变成"abcd"。
4、在JDK当中双引号括起来的字符串,例如: “abc” “def” 都是直接存储在“方法区”的“字符串常量池”当中的。
**为什么SUN公司把字符串存储在一个“字符串常量池”当中呢。
—因为字符串在实际的开发中使用太频繁。为了执行效率,所以把字符串放到了方法区的字符串常量池当中。
🎽关于String对象(类似 s=new String() )
class User1{
private String name;
private int id;
public User1(){}
public User1(int id,String name){
this.id=id;
this.name=name;
}
}
public class Test17 {
public static void main(String[] args){
//这两行代码表示底层创建了3个字符串对象,都在字符串常量池当中。
String s1="abcdef";
String s2="abcdef"+"xy";
/*
思考以下:
这是使用new的方式创建的字符串对象,这个代码中的“xy"是从哪里来的?
凡是双引号括起来的都在字符串常量池中有一份,
new对象的时候一定在堆内存当中开辟空间
*/
String s3=new String("xy");
User1 s4=new User1(110,"张三");
}
}
🎿回顾知识点:
public class Test17 {
public static void main(String[] args){
String s1="hello";
/*
"hello"是存储在方法区的字符串常量池当中
所以这个”hello"不会新建。(因为这个对象已经存在了!)
*/
String s2="hello";
//分析结果是true还是false?
//==双等号比较的是不是变量中保存的内存地址?答案:是的!
System.out.println(s1==s2);//true
String x=new String("xyz");
String y=new String("xyz");
//分析结果是true还是false?
//==双等号比较的是不是变量中保存的内存地址?答案:是的!
System.out.println(x==y);//false
}
}
敲重点!!!(记熟)
🏯通过查阅API文档,可以了解关于String常用的构造方法:
- int lastIndexOf(String str)
- int lastIndexOf(String str,int fromIndex)
返回与字符串str匹配的最后一个子串的开始位置。从原始字符串末尾或fromIndex开始匹配
- boolean startsWith(String prefix)
- boolean endsWith(String suffix)
判断某个字符是否是某个子字符串开始或结束
- String substring(int beginIndex)
- String substring(int beginIndex,int endIndex)
返回一个新的字符串。这个字符串包含原始字符串中从beginIndex到字符串末尾或endIndex-1的所有代码单元。
- char[] toCharArray()
将字符串转换成char数组
- String中只有一个方法是静态的,不需要new对象,这个方法叫做valueOf(),其作用是将“非字符串”转换成“字符串”。
class Customer{
Customer(){}
//重写toString方法
public String toString(){
return "我是高级用户";
}
}
public class IntegerTest01 {
public static void main(String[] args){
String s1=String.valueOf(true);
String s2=String.valueOf(100);
String s3=String.valueOf(3.14);
System.out.println(s1+" "+s2+" "+s3);
//这个静态的valueOf()方法,参数是一个对象的时候,会自动调用该对象的toString()方法嘛?
String s4=String.valueOf(new Customer());
// System.out.println(s4);//没有重写toString()方法之前是对象的内存地址:Customer@15aeb7ab
System.out.println(s4);
}
}
- String replace(CharSequence target,CharSequence)
替换 String的父接口就是CharSequence
- String[] split(String regex)
拆分数组- Java中的 split 函数是用于按指定字符(串)或正则去分割某个字符串,结果以字符串数组形式返回;
import java.util.*;
public class Test06 {
public static void main(String[] args){
/*替换*/
String newString1="http://www.baidu.com".replace("http://","https://");
System.out.println(newString1); //https://www.baidu.com
String newString2="name=zhangsan&password=123&age=23".replace("=",":");
System.out.println(newString2);//name:zhangsan&password:123&age:23
/*拆分*/
String[] ymd="1980-10-11".split("-");
for(int i=0;i<ymd.length;i++){
System.out.println(ymd[i]);//1980 10 11
}
String param="name=zhangsan&password=123&age=23";
String[] params=param.split("&");
for(int i=0;i<params.length;i++){
System.out.println(params[i]);
}
/*
name=zhangsan
password=123
age=23
*/
}
}
- String toLowerCase()
转换为小写
- String toUpperCase()
转换为大写
- String trim()
去除字符串前后空白
- char charAt(int index)
返回给定位置的代码单元。
- int comparaTo(String other)
按照字典顺序,如果字符串位于other之前,返回一个负数;如果字符串位于other之后返回一个1正数;如果两个字符串相等,返回0。
- int length()
返回字符串代码单元的个数
/*创建格式化字符串*/
import java.util.*;
public class Test3 {
public static void main(String[] args){
float floatVar=1;
int intVar=2;
char stringVar='a';
//方法一:
System.out.printf("浮点变量的值为"+"%f,整型变量的值为"+
"%d, 字符串变量的值为"+
"is %s",floatVar,intVar,stringVar);
System.out.print("\n");
//方法二
String fs;
fs=String.format("浮点变量的值为"+"%f,整型变量的值为"+
"%d, 字符串变量的值为"+
"is %s",floatVar,intVar,stringVar);
System.out.println(fs);
}
}
java.util.Arrays
●static String toString(xxx[] a)
返回包含a中元素的一个字符串,这些元素用中括号包围,并用逗号分隔。在这种方法以及后面的方法中,数据元素类型xxx可以是int 、long、short、char、 byte、 boolean、 float 或double
●static xxx[] copyOf(xxx[] a,int end)
●static xxx[] copyOfRange(xxx[] a,int start,int end)
返回与a类型相同的一个数组,其长度为length或者end-start,数组元素为a的值。如果end大于a.length,结果填充0或者false值。
●static void sort(xxx[] a)
使用优化的快速排序算法对数组进行排序。
●static int binarySearch (xxx[] a,xxx v)
●static int binarySearch (xxx[] a,int start,int end,xxx v)
使用二分查找算法在有序数组a中查找值v。如果找到v。如果找到v,则返回 相应的下标;否则,返回一个负值r。-r-1是v应插入的位置(为保持a有序)。
●static void fill (xxx[] a,xxx v)
将数组的所有数据元素设置为v
●static boolean equals(xxx[] a, xxx[] b)
如果两个数组大小相同,并且下标相同的元素都对应相等,返回true。
java.time.LocalDate
●static LocalDate now()
构造一个表示当前日期的对象
●static LocalDate of(int year, int month, int day)
构造一个表示给定日期的对象
●int getYear()
●int getMonthValue()
●int getDayOfMonth()
得到当前日期的年、月、日
●DayOfWeeks getDayOfWeek
得到当前日期是星期几,作为DayOfWeek类的一个实例返回。调用getValue来得到1~7之间的一个数,表示这是星期几,1表示星期一,7表示星期日。
●LocalDate plusDays(int n)
●LocalDate minusDays(int n)
生成当前日期之后或之前n天的日期。