项目1单例模式
解决一个类在内存中只能存在一个对象,想要保证对象的唯一。
思路:
将构造方法私有化(采用private修饰)
在类中创建一个私有的本类对象(将类封装成private static类型)
提供一个用类名调用的共有方法获取该对象(静态方法调用)
单例模式的类会自行实例化并创建一个对象,同时对外提供一些访问这个对象的方式。
饿汉式
加载类的时候就把单利初始化完成。
懒汉式
只有在创建对象时才会调用。节约内存。
项目2 String 类
1、String就是字符串类型,属于java.lang包,不需要导包
2、所有的字符串常量(“Hello World”、”abc”)都属于String类型的对象
3、字符串字面值属于常量,存储在方法区的常量池中。
4、String类型在创建之后就无法更改(是一个不可变的字符序列)。
5、不可变的原因是String类型只提供了构造方法,没有提供set方法,因此只能在创建对象的时候,初始化成员变量,将来对象创建完成之后,无法通过方法来修改。
对象的增删改
创建
方式1
String str=new String();
str=“abc”;
方式2
String str1=new String(“abc”);
方式3
String str=“abc”;
方式4
Char[] arr={‘a’,’‘b’,‘c’};
String str=new String(arr);
方法5
String str2=str;
String 类的操作
判断功能的方法
1、equals(Object obj):判断调用者和参数对象描述的字符串内容是否相同
2、equalsIgnoreCase(String otherStr):忽略大小写判断两个字符串内容是否相同
3、contains(String str):判断调用者是否包含了str这个子串
4、startsWith(String prefix):判断调用者是否以prefix开头
5、endsWith(String suffix):判断调用者是否以suffix结尾
6、isEmpty():判断调用者是否是空串
实例:
String s1 = "aaa";
String s2 = new String("aaa");
System.out.println(s1.equals(s2));
//判断键盘输入的值是否为admin
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
System.out.println(str=="admin");
System.out.println("admin".equals(str)); //常量和变量使用equals比较内容时,尽量把常量写在前面
//equalsIgnoreCase 忽略大小写的比较
String str1 = "aaa";
String str2 = "AAA";
System.out.println(str1.equals(str2));
System.out.println(str1.equalsIgnoreCase(str2));
//contains 判断字符串是否包含某内容(子串)
String str = "abcde";
System.out.println(str.contains("ab"));
System.out.println(str.contains("cde"));
System.out.println(str.contains("ac"));
// startsWith endsWith 判断字符串是否以某个值开头,是否以某个值结尾
String str="http://www.sina.com.cn";
System.out.println(str.startsWith("h"));
System.out.println(str.startsWith("http"));
System.out.println(str.startsWith("http://www.sina.com.cn"));
System.out.println(str.startsWith("a"));
System.out.println(str.endsWith("cn"));
System.out.println(str.endsWith(".cn"));
// isEmpty 判断字符串是否 为空串
String str1 = "";
String str2 = new String();
String str3 = new String("");
String str4 = " ";
System.out.println(str1.isEmpty());
System.out.println(str2.isEmpty());
System.out.println(str3.isEmpty());
System.out.println(str4.isEmpty());
获取功能的方法
1、length():获取字符串字符的个数
2、charAt(int index):返回调用者字符串中索引为index的字符(和length方法结合之后可以遍历字符串)
3、substring(int beginIndex):获取一个字符串,内容是从当前字符串的beginIndex索引开始
4、substring(int beginIndex, int endIndex):获取一个指定索引范围的子串
注意事项:1、包含头不包含尾,返回的结果中,不包含endIndex索引指向的字符;2、所有的方法都无法修改字符串对象本身,一般都是返回一个新的字符串对象
5、indexOf家族:
indexOf(int ch):返回ch字符在当前调用者字符串中,第一次出现的索引
indexOf(int ch, int fromIndex):从fromIndex索引开始寻找,找到ch字符在当前字符串中第一次出现的索引
indexOf(String str):返回的是str这个字符串在调用者字符串中第一次出现的索引
indexOf(String str, int fromIndex):从fromIndex索引开始寻找,找到str字符串在当前字符串中第一次出现的索引(注意:无论从哪个位置开始找,所有字符的索引都不会变化)
6、lastIndexOf家族:
和IndexOf基本一样,只不过是从后往前找,所有字符和字符串的索引也都不会发生变化
实例:
public class Demo05_String{
public static void main(String[] args) {
/*
// 1 length() 获取字符串长度(由多少个字符组成)
String str = "abc";
int x = str.length();
System.out.println(x);
*/
/*
//2 charAt 获取某个位置上的字符
String str = "abcde";
char c = str.charAt(1);
System.out.println(c);
*/
/*
//3 substring 截取子串
String str = "abcdefg";
String result = str.substring(2); //取到最后
System.out.println(result);
String result2 = str.substring(2,4); // 左闭右开
System.out.println(result2);
*/
/*
//4 indexOf 查找位置
String str = "abcdeabcd";
int idx = str.indexOf("cd");
System.out.println(idx);
int idx2 = str.indexOf("ab",3);
//int idx2 = str.indexOf("ab",-3);// 第2个参数为负数,相当于0
System.out.println(idx2);
int idx3 = str.indexOf("xy");
System.out.println(idx3); // 找不到时,返回-1
*/
/*
//5 lastIndexOf 查找位置 从后向前找
String str = "abcdeabcd";
int idx = str.lastIndexOf("cd");
System.out.println(idx);
int idx2 = str.lastIndexOf("ab",3);
System.out.println(idx2);
int idx3 = str.lastIndexOf("xy");
System.out.println(idx3); // 找不到时,返回-1
*/
}
}
转换功能的方法
1、byte[] getBytes():将当前字符串,转成字节数组
2、char[] toCharArray():将当前的字符串,转成字符数组
3、toUpperCase():将当前的字符串,转成全大写形式
4、toLowerCase():将当前的字符串,转成全小写形式
5、concat(String str):将当前调用者,和参数str进行拼接,返回拼接后的长字符串(不常用,因为更多使用的是运算符+)
6、valueOf家族:可以将任意数据类型的数据,转换成字符串
其他方法
1、replace(String oldStr, String newStr):将调用者中的老串替换成新串
2、trim():去掉字符串左右两边的空格、制表符
3、split():字符串拆分
public class Demo08{
public static void main(String[] args) {
/*
// replace 替换 replaceAll---后面讲
String str = "www.baidu.com";
String str2 = str.replace("w", "x");
System.out.println(str2);
String str3 = str.replace("www", "x");
System.out.println(str3);
*/
/*
// trim 去首尾空格
String str = " aaa bbb ";
String str2 = str.trim();
System.out.println(str);
System.out.println(str2);
*/
/*
// split 字符串拆分 拆成数组
String str = "aaa#bbb#ccc#ddd";
String[] ss = str.split("#");
for(String s:ss){
System.out.println(s);
}
*/
/*
String str = "aaa##bbb#ccc#ddd";
String[] ss = str.split("#");
for(String s:ss){
System.out.println(s);
}
*/
String str = "aaa+bbb+ccc+ddd";
//String[] ss = str.split("+"); // 因为+是正则表达式(后面讲)的特殊字符 (+ . * ?)需要转义
String[] ss = str.split("\\+");
for(String s:ss){
System.out.println(s);
}
}
}