今日学习:
Scanner(用于接收键盘录入数据)
String(字符串)
Scanner的概述和构造方法原理
- Scanner的概述:JDK5以后用于获取用户的键盘输入
- Scanner的构造方法原理:
Scanner(InputStream source)
System类下有一个静态的字段:
public static final InputStream in; 标准的输入流,对应着键盘录入。
Scanner类的hasNextXxx()和nextXxx()方法
基本格式:
- hasNextXxx() 判断下一个是否是某种类型的元素,其中Xxx可以是Int,Double等。如果需要判断是否包含下一个字符串,则可以省略Xxx;
- nextXxx() 获取下一个输入项。Xxx的含义和上个方法中的Xxx相同。
Scanner获取数据出现的小问题及解决方案
- 三个常用的方法:
public int nextInt():获取一个int类型的值
public String nextLine():获取一个String类型的值
public String next():获取一个String类型的值 - 问题解决方案
第一种:先获取一个数值后,在创建一个新的键盘录入对象获取字符串;
第二种:把所有的数据都先按照字符串获取,然后要什么,你就对应的转换为什么。
String类的概述
- 字符串:字符串是由多个字符组成的一串数据(字符序列),可以看成是字符数组。
- String类的概述
通过JDK提供的API,查看String类的说明;
(1).字符串字面值"abc"也可以看成是一个字符串对象;
(2).字符串是常量,一旦被创建,就不能被改变。
String类的构造方法
- public String():空构造
- public String(byte[] bytes):把字节数组转成字符串
- public String(byte[] bytes,int index,int length):把字节数组的一部分转成字符串(index:表示的是从第几个索引开始, length表示的是长度)
- public String(char[] value):把字符数组转成字符串
- public String(char[] value,int index,int count):把字符数组的一部分转成字符串
- public String(String original):把字符串常量值转成字符串
String的特点
- String的特点:一旦被创建就不能改变。因为字符串的值是在堆内存的常量池中划分空间分配地址值的。
- 内存图解释(内容不能变,引用可以变)
String s = “hello” ;
s = “world” + “java”; 问s的结果是多少? - 内存图解释: 内容不能变,引用可以变。
String类的常见面试题
-
面试题1
String s = new String(“hello”)和String s = “hello”;的区别
并画内存图解释。
-
面试题2
看程序写结果String s1 = new String("hello"); String s2 = new String("hello"); System.out.println(s1 == s2); //false System.out.println(s1.equals(s2)); //true String s3 = new String("hello"); String s4 = "hello"; System.out.println(s3 == s4); //false System.out.println(s3.equals(s4)); //true String s5 = "hello"; String s6 = "hello"; System.out.println(s5 == s6); //true System.out.println(s5.equals(s6)); //true
-
面试题3
看程序写结果String s1 = "Hello"; String s2 = "Hello"; String s3 = "Hel" + "lo"; String s4 = "Hel" + new String("lo"); String s5 = new String("Hello"); String s6 = s5.intern(); String s7 = "H"; String s8 = "ello"; String s9 = s7 + s8; System.out.println(s1 == s2); //true System.out.println(s1 == s3); //true System.out.println(s1 == s4); //false System.out.println(s1 == s9); // false System.out.println(s4 == s5); //false System.out.println(s1 == s6); //true
String类的判断功能
- public boolean equals(Object obj):比较字符串的内容是否相同,区分大小写;
- public boolean equalsIgnoreCase(String str):比较字符串的内容是否相同,忽略大小写;
- public boolean contains(String str):判断字符串中是否包含传递进来的字符串;
- public boolean startsWith(String str):判断字符串是否以传递进来的字符串开头;
- public boolean endsWith(String str):判断字符串是否以传递进来的字符串结尾;
- public boolean isEmpty():判断字符串的内容是否为空串""。
模拟用户登录
public class MyTest {
public static void main(String[] args) {
String name = "zhangsan";
String password = "123456";
for (int i = 0; i<3; i++) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入用户名");
String uname = sc.nextLine();
System.out.println("请输入密码");
String upwd = sc.nextLine();
if (name.equals(uname) && password.equals(upwd)) {
System.out.println("欢迎" + name + "登陆");
break;
} else{
if(i==2){
System.out.println("您的次数已用完!");
} else {
System.out.println("输入错误," + "您还剩余" +(2-i) + "次机会");
}
}
}
}
}
String类的获取功能
- public int length():获取字符串的长度
- public char charAt(int index):获取指定索引位置的字符
- public int indexOf(int ch):返回指定字符在此字符串中第一次出现处的索引
- public int indexOf(String str):返回指定字符串在此字符串中第一次出现处的索引
- public int indexOf(int ch,int fromIndex):返回指定字符在此字符串中从指定位置后第一次出现处的索引
- public int indexOf(String str,int fromIndex):返回指定字符串在此字符串中从指定位置后第一次出现处的索引
- public String substring(int start):从指定位置开始截取字符串,默认到末尾
- public String substring(int start,int end): 从指定位置开始到指定位置结束截取字符串
字符串的反向遍历
public class Test_3 {
public static void main(String[] args) {
String str ="abcdefg";
for(int i=0;i<str.length();i++) {
char letter = str.charAt(i);
System.out.println(letter);
}
}
}
统计不同类型字符个数
public class Test3 {
/**
* 需求:统计一个字符串中大写字母字符,小写字母字符,数字字符出现的次数,其他字符出现的次数。
* ABCDEabcd123456!@#$%^
* 分析:字符串是有字符组成的,而字符的值都是有范围的,通过范围来判断是否包含该字符
* 如果包含就让计数器变量自增
*/
public static void main(String[] args) {
String s = "ABCDEabcd123456!@#$%^";
int big = 0;
int small = 0;
int num = 0;
int other = 0;
//1,获取每一个字符,通过for循环遍历
for(int i = 0; i < s.length(); i++) {
char c = s.charAt(i); //通过索引获取每一个字符
//2,判断字符是否在这个范围内
if(c >= 'A' && c <= 'Z') {
big++; //如果满足是大写字母,就让其对应的变量自增
}else if(c >= 'a' && c <= 'z') {
small++;
}else if(c >= '0' && c <= '9') {
num++;
}else {
other++;
}
}
//3,打印每一个计数器的结果
System.out.println(s + "中大写字母有:" + big + "个,小写字母有:" + small + "个,数字字符:"
+ num + "个,其他字符:" + other + "个");
}
}
String类的转换功能
- public byte[] getBytes():把字符串转换为字节数组
- public char[] toCharArray():把字符串转换为字符数组
- public static String valueOf(char[] chs):把字符数组转成字符串
- public static String valueOf(int i):把int类型的数据转成字符串
**注意:**String类的valueOf方法可以把任意类型的数据转成字符串。 - public String toLowerCase():把字符串转成小写
- public String toUpperCase():把字符串转成大写
- public String concat(String str):把字符串拼接
按要求转换字符
需求:把一个字符串的首字母转成大写,其余为小写。(只考虑英文大小写字母字符)
public class MyTest {
public static void main(String[] args) {
String str = "aasdfeASFDFasdfeasdfadsfasdf";
String frist = str.substring(0, 1);//先取出字符串中的首字母
String after = str.substring(1);//再取出字符串中的剩余字母
String s=frist.toUpperCase();//对首字母转换成大写
String s1=after.toLowerCase();//对剩余字母转换成小写
String s2 = s.concat(s1);//拼接转换的字符或字符串
System.out.println(s2);
}
}
输出结果:Aasdfeasfdfasdfeasdfadsfasdf
String类的其他功能
- String的替换功能及案例演示
public String replace(char old,char new) 将指定字符进行互换
public String replace(String old,String new) 将指定字符串进行互换 - String的去除字符串两空格及案例演示
public String trim() 去除两端空格 - String的按字典顺序比较两个字符串及案例演示
public int compareTo(String str) 会对照ASCII 码表 从第一个字母进行减法运算 返回的就是这个减法的结果;如果前面几个字母一样会根据两个字符串的长度进行减法运算返回的就是这个减法的结果;如果连个字符串一摸一样 返回的就是0。 - public int compareToIgnoreCase(String str) 跟上面一样 只是忽略大小写的比较
把数组转成字符串
需求:把数组中的数据按照指定个格式拼接成一个字符串
举例:
int[] arr = {1,2,3};
拼接结果:
"[1, 2, 3]"
代码如下:
public class MyTest {
public static void main(String[] args) {
int arr[]={1,2,3};
String a="[";
for (int i = 0; i < arr.length; i++) {
a+=arr[i];
if(i!=arr.length-1){
a+=",";
}else{
a+="]";
}
}
System.out.println(a);
}
}
字符串反转并断点查看
需求:把字符串反转
举例:键盘录入"abc"
反转结果:"cba"
代码如下:
public class MyTest {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("输入字符串:");
String s=sc.nextLine();
String ch="";
for (int i=s.length()-1; i >=0 ; i--) {
ch+=s.charAt(i);
}
System.out.println("输出的字符串:"+ch);
}
}
在大串中查找小串出现的次数代码实现
需求:统计大串中小串出现的次数
public class MyTest4 {
public static void main(String[] args) {
String maxStr = "woaijavawozhenaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagun";
int conut = 0;
if (!maxStr.contains("#")) {
String s = maxStr.replace("java", "#");
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (c == '#') {
conut++;
}
}
}
System.out.println(conut);
System.out.println("============================================================");
int length = maxStr.length();
String java = maxStr.replace("java", "");
int length1 = java.length();
int len = (length - length1) / 4;
System.out.println(len);
}
}