Scanner的概述: JDK5以后用于获取用户的键盘输入
Scanner的构造方法原理:
Scanner(InputStream source)
System类下有一个静态的字段:
public static final InputStream in; 标准的输入流,对应着键盘录入。
hasNextXxx() 判断下一个是否是某种类型的元素,其中Xxx可以是Int,Double等。
如果需要判断是否包含下一个字符串,则可以省略Xxx
nextXxx() 获取下一个输入项。Xxx的含义和上个方法中的Xxx相同
import java.util.Scanner;
public class ScannerDemo3 {
public static void main(String[] args) {
while (true){
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个整数");
//hasXXX 判断录入数据的 类型
if (scanner.hasNextInt()) {
int i = scanner.nextInt();
System.out.println(i);
break;
} else {
System.out.println("录入类型不正确,请重新输入一个整数");
}
}
}
}
常用的方法:
public int nextInt():获取一个int类型的值
public String nextLine():获取一个String类型的值
public String next():获取一个String类型的值
有个小问题,我们在获取了int类型的数据后,再去获取String类型的值会获取不到,这时候我们可以重新new一个对象
import java.io.InputStream;
import java.util.Scanner;
public class ScannerDemo {
public static void main(String[] args) {
// Scanner(InputStream source) 构造一个新的 Scanner,它生成的值是从指定的输入流扫描的。
InputStream in = System.in
// in “标准”输入流。此流已打开并准备提供输入数据。通常,此流对应于键盘输入
Scanner scanner = new Scanner(in);
//Scanner 常用的两套方法
//录入数据:nextXXX
//录入基本类型
/*;
scanner.nextLong();
scanner.nextDouble();*/
System.out.println("请录入一个整数");
int i = scanner.nextInt();
System.out.println(i);
scanner = new Scanner(in); //重写创建一个对象
System.out.println("请随便输入一段字符串");
//录入字符串
String s = scanner.nextLine();
System.out.println(s);
//使用nextLine()方法时,你先录入整数,在录入字符串,会导致字符串录入不进去,你可以再录入字符串时,重新再创建一个Scanner 对象
}
}
public String nextLine():获取一个String类型的值
public String next():获取一个String类型的值
区别:
import java.util.Scanner;
public class ScannerDemo2 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个整数");
int i = scanner.nextInt();
System.out.println(i);
scanner = new Scanner(System.in);
System.out.println("请录入一个字符串");
String s = scanner.nextLine();
// String s = scanner.next(); 录入的字符串中间,有空格,空格后面的内容不录入
System.out.println(s);
}
}
字符串是由多个字符组成的一串数据(字符序列)
字符串可以看成是字符数组
注意:
a:字符串字面值"abc"也可以看成是一个字符串对象。
b:字符串是常量,一旦被创建,就不能被改变。
String的特点: 一旦被创建就不能改变 因为字符串的值是在方法区的常量池中划分空间 分配地址值的
String s = "hello" ;
s = "world" + "java";
//问s的结果是多少?
//worldjava
//内容不能变,引用可以变
public String():空构造
public String(String original):把字符串常量值转成字符串
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 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 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系列:indexOf系列是从前往后开始,lastIndexOf系列是从后往前开始
public String substring(int start): 从指定位置开始截取字符串,默认到末尾。
public String substring(int start,int end): 从指定位置开始到指定位置结束截取字符串。
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): 把字符串拼接。
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) 跟上面一样 只是忽略大小写的比较
一些方法的使用
public class Demo1 {
public static void main(String[] args) {
/*例: 敏感字: 奥巴马、普京
键盘输入: 我喜欢奥巴马呀,还喜欢普京
打印输出: 我喜欢*呀,还喜欢*
*/
String s="我喜欢奥巴马呀,还喜欢普京";
String s1 = s.replace("奥巴马", "*");
String s2 = s1.replace("普京", "*");
System.out.println(s2);
}
}
public class Test {
public static void main(String[] args) {
/* A
需求:统计大串中小串出现的次数
*/
String maxStr="woyaoxuejava,xihuanjava,aijava,javajavawozuiai";
String minStr="java";
//统计上面这段字符串中java出现了几次
/*
* 思路:indexOf("java")
* */
int m=0;
int i = maxStr.indexOf("java");
while (i!= -1){
maxStr = maxStr.substring(i + 4);
m++;
i = maxStr.indexOf("java");
}
System.out.println(m);
}
}
import java.util.Scanner;
public class Demo3 {
public static void main(String[] args) {
//判断下列字符串中某个字符只有一个
String str2="asdfasdfasdfasdEfasdeasdfeasadfeeaf";
Scanner scanner = new Scanner(System.in);
System.out.println("请输入要查询的字母:");
String s = scanner.nextLine();
StringBuffer buffer = new StringBuffer(str2);
panDuan(s, buffer);
}
private static void panDuan(String s, StringBuffer buffer) {
for (int i = 0; i <buffer.length(); i++) {
char c = buffer.charAt(i);
//将字符c转换成字符串类型
String s1 = String.valueOf(c);
if (s.equals(s1)){
System.out.println("有多个");
break;
}else{
System.out.println("只有一个");
break;
}
}
}
}