20230415 API(String )
常用API(String 、ArrayList)
(Application Programming Interface)
String简单介绍
String 类定义的变量可以用于存储字符串,同时String类提供了很多操作字符串的功能,我们可以直接使用。
String
一、String类概述
1.java.lang.String 类代表字符串,String类定义的变量可以用于指向字符串对象,然后操作该字符串。
2.Java程序中的所有字符串文字都为此类的对象
String类的特点详解:
String其实常被成为不可变字符串类型,它的对象在创建后不可以被更改。
字符串对象存在哪里?
1.以“”方式给出的字符串对象,在字符串常量池中存储。
package com.yushao.string; public class StringDemo1 { public static void main(String[] args) { String name = "玉少"; name += "吃瓜"; name += "干饭"; System.out.println(name); } } //玉少吃瓜干饭
String是不可变字符串的原因?
1.String变量每次的修改其实都是产生并指向了新的字符串对象。
2.原来的字符串对象都是没有改变的,所以称不可变字符串。
二、String类创建对象的2种方法
1.方法一:直接使用“”定义。(推荐方式)
String name = “玉少”;
2.方法二:通过String类的构造器创建对象。
public String() 创建一个空白字符串对象,不含有任何内容
public String(String original) 根据传入的字符串内容,来串讲字符串对象
public String(char[] chs) 根据字符数组的内容,来创建字符串对象
public String(byte[] chs) 根据字符数组的内容,来创建字符串对象
package com.yushao.string; public class StringDemo2 { public static void main(String[] args) { // 1.方法一:直接使用“”定义。(推荐方式) // String name = “玉少”; String name = "玉少"; System.out.println(name); // 2.方法二:通过String类的构造器创建对象。 // public String() 创建一个空白字符串对象,不含有任何内容(几乎不用) String s1 = new String(); System.out.println(s1); // public String(String original) 根据传入的字符串内容,来串讲字符串对象 (几乎不用) String s2 = new String("我是中国人"); System.out.println(s2); // public String(char[] chs) 根据字符数组的内容,来创建字符串对象 char[] chars = {'a' , 'b', 'c' , '中' , '国'}; String s3 = new String(chars); System.out.println(s3); // public String(byte[] chs) 根据字符数组的内容,来创建字符串对象- byte[] bytes = {97,98,99,65,66,67}; String s4 = new String(bytes); System.out.println(s4); } } /*玉少 我是中国人 abc中国 abcABC*/
区别:
1.以“”方式给出的字符串对象,在字符串常量池中存储,而且相同内容只会在其中存储一份。(这个地方可以节省内存)
2.通过构造器new的对象,每new一次都会产生一个新对象,放在堆内存中。
// 这个地方是String类创建对象的两种方法的区别 System.out.println("--------------------"); String ss1 = "abc"; String ss2 = "abc"; System.out.println(ss1 == ss2); char[] char1 = {'a' , 'b', 'c' , '中' , '国'}; String ss3 = new String(char1); String ss4 = new String(char1); System.out.println(ss3 == ss4); /*true false */
字符串对象的特点:
1.双引号创建的字符串对象,在字符串常量池中存储同一个。
2.通过new构造器创建的字符串对象,在堆内存中分开存储。
三、String类常见面试题
package com.yushao.string; public class StringDemo3 { public static void main(String[] args) { // 1、 // 这个地方是创建了两个对象,即一个是:带双引号的abc放在字符串常量池里面,还有一个是new出来的放在堆内存里面的 String s2 = new String("abc"); // 这个的地方没有创建对象,因为上面已经有abc在字符串常量池里头,所以没有。 String s1 = "abc"; System.out.println(s1 == s2);//true // 2、 String s3 = "abc";//放在字符串常量池中。 String s4 = "ab"; String s5 = s4 + "c";//因为s4不是直接带括号的“ab”,所以,他会和“c”结合成新的abc然后在堆内存中,产生地址,给s5 System.out.println(s5 == s3);//false String s6 = "abc"; String s7 = "a" + "b" + "c"; System.out.println(s6 == s7);//true // java存在编译优化机制,程序在编译是:"a" + "b" + "c"会直接转成"abc" } }
四、String类常见API-字符串内容比较
package com.yushao.string; import java.sql.SQLOutput; import java.util.Scanner; public class StringEqualsDemo4 { public static void main(String[] args) { //1.正确登录名和密码 String okName = "yushao"; String okPassword = "123456"; //2.用户输入密码 Scanner sc = new Scanner(System.in); System.out.println("请您输入用户名"); String name = sc.next(); System.out.println("输入密码"); String password = sc.next(); //3.判断用户输入的和原本的是否对 /* if (okName == name && okPassword == password) { System.out.println("输入账号密码正确"); }else { System.out.println("输入错误"); } //输入错误 */ // 这个地方出现问题,他们俩的地址不同,所以输出的结果是:输入错误。 //解决方法 //此时可以调用Stirng里面的equals方法,它可以只判断String里面的内容,而不看地址 if (okName.equals(name) && okPassword.equals(password)) { System.out.println("输入账号密码正确"); }else { System.out.println("输入错误"); } //4.忽略大小写比较内容的API,一般用于比较验证码这样的业务 String sysCode = "234ADF"; String code1 = "234adf"; System.out.println(sysCode.equals(code1));//false System.out.println(sysCode.equalsIgnoreCase(code1));//true } }
1.如果是字符串比较应该使用什么方式进行比较,为什么?
使用String提供的equlas方法。
只关心内容一样就返回true。
2.开发中什么时候使用==比较数据
基本数据类型比较时使用。
五、String类常见API-遍历、替换、截取、分割操作
| public int length() | 返回此字符串的长度 |
| Public char charAt() | 获取某个索引位置处的字符 |
| public char[] toCharArray() | 将当前字符串转换成字符数组返回 |
| public String substring(int beginIndex, int endIndex) | 根据开始和结束索引进行截取,得到新的字符串(包前不包后) |
| public String substring(int behinIndex) | 从传入的索引处截取,截取到末尾,得到新的字符串 |
| Public String replace(CharSequence target,CharSequence replacement) | 使用新值,将字符串中的旧值替换,得到新的字符串。 |
| public String[] split(String regex) | 根据传入的规则切割字符串,得到字符串数组返回。 |
package com.yushao.string; public class StringAPIOtherDemo5 { public static void main(String[] args) { // 1.public int length() 返回此字符串的长度 String name = "我是yushao"; System.out.println(name.length());//8 // 2.Public char charAt() 获取某个索引位置处的字符 char c = name.charAt(1); System.out.println(c);//是 System.out.println("-------字符串的遍历--------"); for (int i = 0; i < name.length(); i++) { System.out.println(name.charAt(i)); } // 3.public char[] toCharArray(): 将当前字符串转换成字符数组返回 char[] chars = name.toCharArray(); for (int i = 0; i < chars.length; i++) { char ch = chars[i]; System.out.println(ch); } // 4.public String substring(int beginIndex, int endIndex) 根据开始和结束索引进行截取,得到新的字符串(包前不包后) String name2 = "java是最厉害的编程语言"; String rs = name2.substring(0,9); System.out.println(rs);//java是最厉害的 String rs1 = name2.substring(4,9); System.out.println(rs1);//是最厉害的 // 5.public String substring(int behinIndex) 从传入的索引处截取,截取到末尾,得到新的字符串 String rs2 = name2.substring(4); System.out.println(rs2); // 6.Public String replace(CharSequence target,CharSequence replacement) 使用新值,将字符串中的旧值替换,得到新的字符串。 String name3 = "玉少是真的厉害,加油玉少!"; String rs3 = name3.replace("玉少", "**"); System.out.println(rs3);//**是真的厉害,加油**! // 7.public boolean contains(CharSequence s)//输入的内容是否在里面可以找到 System.out.println(name3.contains("玉少"));//true System.out.println(name3.contains("玉多"));//false // 8.public boolean startWith(String prefix)//开头是否是输入的字符串 System.out.println(name3.startsWith("玉少"));//true System.out.println(name3.startsWith("玉少真帅!"));//false // 9.public String[] split(String regex) 根据传入的规则切割字符串,得到字符串数组返回。 String name4 = "王宝强,贾乃亮,陈羽凡"; String[] names = name3.split(","); for (int i = 0; i < names.length; i++) { System.out.println("您选择的是:" + names[i]); } // 您选择的是:王宝强 // 您选择的是:贾乃亮 // 您选择的是:陈羽凡 } }
六、String类案例实战
1)String类开发验证码功能
需求:随机产生一个5位的验证码,每位可能是数字,大写字母,小写字母
分析:
1.定义一个String类型的变量存储a—z,A—Z,0—9之间的全部字符。
2.循环5次,随机一个范围内的索引,获取对应字符连接起来即可。
package com.yushao.string; import java.util.Random; public class StringExec6 { public static void main(String[] args) { // 1.定义可能出现的字符信息 String datas = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; // 2.循环5次,每次生成一个随机的索引,提取对应的字符连接即可 String code = ""; Random r = new Random(); for (int i = 0; i < 5; i++) { int index = r.nextInt(datas.length()); char c = datas.charAt(index); code += c; } // 3.输出字符串数组即可 System.out.println(code); } }
2)模拟用户登录功能
需求:模拟用户登录功能,最多只给三次机会
分析:
1.系统后台定义好正确的登录名称,密码。
2.使用循环控制三次,让用户输入正确的登录名和密码,判断是否登录成功,登录成功则不再进行登录,登录失败则给出提示,并让用户继续登录。
package com.yushao.string; import java.util.Scanner; public class StringExec7 { public static void main(String[] args) { //定义正确的用户名和密码 String okName = "admin"; String okPassword = "yushao"; //2.定义一个循环,循环3次,让用户登录 Scanner sc = new Scanner(System.in); for (int i = 0; i <3; i++) { System.out.println("请输出用户名"); String setName = sc.next(); System.out.println("请输入密码!"); String setPassword = sc.next(); //3.判断登录是否成功! if (okName.equals(setName)) { //4.判断密码是否正确 if (okPassword.equals(setPassword)) { System.out.println("密码正确,请浏览网页!"); break; }else { //密码错误 System.out.println("您的用户名输入不正确!,您还剩余" + (3 - i) + "次机会"); } }else{ System.out.println("您的用户名输入不正确!,您还剩余" + (3 - i) + "次机会"); } } } }
3)手机号码屏蔽
需求:
以字符串的形式从键盘接收到一个手机号,将中间四位号码屏蔽,最终结果为:158****8987
分析:
1.键盘录入一个字符串,用Scanner实现
2.截取字符串前三位,截取字符串后四位
3.将截取后的两个字符串,中间加上****进行拼接,输出结果即可。
package com.yushao.string; import java.util.Scanner; public class StringExec8 { public static void main(String[] args) { //手机号码屏蔽 //1.先键盘录入一个字符串 Scanner sc = new Scanner(System.in); System.out.println("请输入手机号码。"); String numbers = sc.next(); //2.截取号码的前三位和后四位。 String before = numbers.substring(0,3); String after = numbers.substring(7); String s = before + "****" + after; System.out.println(s); } }

浙公网安备 33010602011771号