Scanner的概述和构造方法原理
Scanner的概述:
JDK5以后用于获取用户的键盘输入
B:Scanner的构造方法原理
Scanner(InputStream source)
System类下有一个静态的字段:
public static final InputStream in; 标准的输入流,对应着键盘录入。
Scanner类的hasNextXxx()和nextXxx()方法的讲解
基本格式
hasNextXxx() : 判断下一个是否是某种类型的元素,其中Xxx可以是Int,Double等。
如果需要判断是否包含下一个字符串,则可以省略Xxx
nextXxx() : 获取下一个输入项。Xxx的含义和上个方法中的Xxx相同
public class Test9 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个整数");
System.out.println(scanner.hasNextInt());
}
}
Scanner获取数据出现的小问题及解决方案
两个常用的方法:
public int nextInt():获取一个int类型的值
public String nextLine():获取一个String类型的值
public String next():获取一个String类型的值
当我们在录入一个int值,多个string值的时候,会出现没录入就结束的情况,其实这种情况是已经录入了回车,但是我们没发现。
解决方法:
先获取一个数值后,在创建一个新的键盘录入对象获取字符串
String类的概述
什么是字符串
字符串是由多个字符组成的一串数据(字符序列)
字符串可以看成是字符数组
String类的概述
通过JDK提供的API,查看String类的说明
可以看到这样的两句话:
a:字符串字面值"abc"也可以看成是一个字符串对象。
b:字符串是常量,一旦被创建,就不能被改变。
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 s1 = new String("hello");
String s2 = new String("hello");
System.out.println(s1 == s2);
System.out.println(s1.equals(s2));
String s3 = new String("hello");
String s4 = "hello";
System.out.println(s3 == s4);
System.out.println(s3.equals(s4));
String s5 = "hello";
String s6 = "hello";
System.out.println(s5 == s6);
System.out.println(s5.equals(s6));
结果为:
false
true
false
true
true
true
为什么呢,new的时候在堆内存,他们指向的地址不同,所以为false,但是equals方法经过重写,他比较的是两个字符串的内容,显然都是hello,所以为true ,当直接String =xxx是,这是一个常量,存放在方法区的常量池中,当第二个继续赋值时,常量池中已经有了hello,他还是指向这个hello,所以最后两个都为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(): 判断字符串的内容是否为空串""
String类的获取功能
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): 返回指定字符串在此字符串中从指定位置后第一次出现处的索引。
可以顺带提一下lastIndexOf系列
public String substring(int start): 从指定位置开始截取字符串,默认到末尾。
public String substring(int start,int end): 从指定位置开始到指定位置结束截取字符串。
public class Test9 {
public static void main(String[] args) {
String s1 ="我爱学习JAVA";
System.out.println("该字符串的长度是"+s1.length());
System.out.println("该字符串第3个索引处的字符是:"+s1.charAt(3));
System.out.println("该字符串中JAVA首次出现的索引是:"+s1.indexOf("JAVA"));
System.out.println("从索引2处截取字符串后为:"+s1.substring(2));
}
}
字符串的遍历
实例:
给一个字符串,倒序打印
public class Test7 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个字符串");
String str =scanner.nextLine();
String str2 ="";
for (int i = str.length()-1; i >=0; i--) {
char c =str.charAt(i);
str2+=c;
}
System.out.println("该字符串倒过来是:"+str2);
}
}
解析:使用charAt方法,然后用循环打印每一个索引对应的字符,然后凑成一字符串
String类的转换功能
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 Test9 {
public static void main(String[] args) {
String s ="ssdASDsdaSDASsdaASADsds";
System.out.println((s.substring(0,1).toUpperCase()).concat(s.substring(1,s.length()).toLowerCase()));
}
}
String类的其他功能
String的替换功能及案例演示
public String replace(char old,char new) 将指定字符进行互换
public String replace(String old,String new) 将指定字符串进行互换
public class Test9 {
public static void main(String[] args) {
String s ="我爱学习";
System.out.println(s.replace("爱", "恨"));
}
}
String的去除字符串两空格及案例演示
public String trim() : 去除两端空格
public class Test9 {
public static void main(String[] args) {
String s =" 我爱学习 ";
System.out.println(s);
System.out.println(s.length());
System.out.println(s.trim());
System.out.println(s.trim().length());
}
}
把数组转成字符串
案例演示
需求:把数组中的数据按照指定个格式拼接成一个字符串
举例:
int[] arr = {1,2,3};
拼接结果:
“[1, 2, 3]”
public class Test9 {
public static void main(String[] args) {
int arr[]={1,2,3};
String s="[";
for (int i = 0; i < arr.length; i++) {
if (i==arr.length-1){
s+=arr[i]+"]";
}else {
s+=arr[i]+",";
}
}
System.out.println(s);
}
}
在大串中查找小串出现的次数代码实现
统计键盘录入的字符串中出现了几次字符串”java”
方法一:
public class Test9 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个字符串");
String str =scanner.nextLine();
int index = str.indexOf("java");
int count =0;
while (index!=-1){
count++;
str=str.substring(index+4);
index=str.indexOf("java");
}
System.out.println(count);
}
}
方法二:用一个字符替换要查找的字符
public class Test9 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个字符串");
String str =scanner.nextLine();
String str1=str.replace("java","X");
int count =0;
for (int i = 0; i < str1.length(); i++) {
char c =str1.charAt(i);
if (c=='X'){
count++;
}
}
System.out.println(count);
}
}
总结:主要学习了JAVA常见类中经常使用的一些方法,方法种类很多,但是很重要,需要多多上手练习才能掌握。