一.Scanner类
1.Scanner概述
- 用途:JDK1.5之后用于用户输入
- 构造方法原理:
Scanner(InputStream source)
System类下有一个静态的字段:public static final InputStream in; 标准的输入流,对应着键盘录入。 - 几种常用的方法:
public int nextInt():获取一个int类型的值
public String nextLine():获取一个String类型的值
public String next():获取一个String类型的值 - 实例演示
package com.westmo.demo;
import java.io.InputStream;
import java.util.Scanner;
public class MyTest1 {
public static void main(String[] args) {
InputStream in = System.in;
Scanner scanner = new Scanner(in);
int i = scanner.nextInt();//输入一个int类型的值
String s = scanner.nextLine();//输入一个String类型的值
String next = scanner.next();//输入一个String类型的值
}
}
2.Scanner获取数据时出现的小问题
package com.westmo.demo;
import java.util.Scanner;
public class MyTest2 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个字符串");
//不会录入回车换行符
String s1 = scanner.next();//我们发现,输入之后,回车程序直接就结束了
System.out.println(s1);//并且next()方法在遇到空格之后,就不会往后录入了
//比如输入we rt rt输出是we
System.out.println("请输入一个字符串");
String s = scanner.nextLine();
}
}
3.hasNextXxx()和nextXxx()方法
- 基本格式
(1) hasNextXxx() 判断下一个是否是某种类型的元素,其中Xxx可以是Int,Double等。如果需要判断是否包含下一个字符串,则可以省略Xxx。
(2)nextXxx() 获取下一个输入项。Xxx的含义和上个方法中的Xxx相同。 - 演示案例
package com.westmo.demo;
import java.util.Scanner;
public class ScannerUtils {
private ScannerUtils(){
}
public static int getnumber(){
int num=0;
while(true){
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个整数");
if(scanner.hasNextInt()){
num=scanner.nextInt();
break;
}else{
System.out.println("你输入的数据类型错误,请重新输入");
}
}
return num;
}
}
package com.westmo.demo;
public class MyTest3 {
public static void main(String[] args) {
System.out.println("请选择1:注册,2:登录");
int number=ScannerUtils.getnumber();
switch (number){
case 1:
System.out.println("进行注册");
break;
case 2:
System.out.println("登录");
break;
}
}
}
二.String 类
1.概述
- 字符串可以看成是字符数组
- 字符串是由多个字符组成的一串数据(字符序列)
- 字符串字面值"abc"也可以看成是一个字符串对象。
- 字符串是常量,一旦被创建,就不能被改变。
2.常见用法
(1)构造方法
- 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):把字符数组的一部分转成字符串
- 案例演示
package com.westmo.demo;
public class MyTest4 {
public static void main(String[] args) {
String s = new String();//创建一个空的字符串
System.out.println(s.toString());
String s1 = new String("abc");
System.out.println(s1.toString());//String类中重写了toString方法,所以输出字符串的内容。
System.out.println(new String(new byte[]{100, 102, 103}));//字节数组转成字符串,输出是dfg
System.out.println(new String(new byte[]{56, 29, 104, 109}, 2, 2));//字节数组的一部分转换,hm
System.out.println(new String(new char[]{'a', 'd', 't'}));//把字符数组转换成字符串,输出adt
System.out.println(new String(new char[]{'1', '你', 'a', 'g'},0,3));//把部分字符数组转换为字符串,输出1你a
}
}
(2)判断功能
- 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(): 判断字符串的内容是否为空串""。
案例演示:模拟登录,给三次机会,并提示还有几次。
package com.westmo.demo;
import java.util.Scanner;
public class MyTest5 {
public static void main(String[] args) {
String username="小明";
int password=123456;
int count=3;
while(count>0) {
Scanner scanner = new Scanner(System.in);
System.out.println("输入用户名");
String name = scanner.nextLine();
System.out.println("输入密码");
int pwd = scanner.nextInt();
if(username.equals(name)&&password==pwd){
System.out.println("登录成功");
break;
}else{
count--;
if(count==0){
System.out.println("输入错误,对不起,你的机会已经用完");
}else {
System.out.println("用户名或密码输入错误,请重新输入");
System.out.println("你还有" + count + "机会");
}
}
}
}
}
(3)获取功能
- 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): 从指定位置开始到指定位置结束截取字符串。
案例演示:统计一个字符串中大写字母字符,小写字母字符,数字字符出现的次数
package com.westmo.demo;
public class MyTest6 {
public static void main(String[] args) {
String str="ADadaqeqey3y18eddYDGDrd7qt2EU6363g6BD1DN87Q2SADNdt14190809asdD1";
int daxienum=0;
int xiaoxienum=0;
int number=0;
for (int i=0;i<str.length();i++){
if(str.charAt(i)>='A'&&str.charAt(i)<='Z'){
daxienum++;
}else if(str.charAt(i)>='a'&&str.charAt(i)<='z'){
xiaoxienum++;
}else if(str.charAt(i)>='0'&&str.charAt(i)<='9'){
number++;
}
}
System.out.println("大写字符个数为:"+daxienum+" 小写字母个数为:"+xiaoxienum+" 数字个数为:"+number);
}
}
(4)转换功能
- 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): 把字符串拼接。
案例演示: 需求:把一个字符串的首字母转成大写,其余转为小写
package com.westmo.demo;
public class MyTest7 {
public static void main(String[] args) {
String str="atFyfFtfSFfsSysSs";
String substring = str.substring(0,1);
String substring1 = str.substring(1, str.length() - 1);
System.out.println(substring.toUpperCase().concat(substring1.toLowerCase()));
}
}
(5)其他功能
- public String replace(char old,char new) 将指定字符进行互换
- public String replace(String old,String new) 将指定字符串进行互换
- public String trim() 去除两端空格
- public int compareTo(String str) 会对照ASCII 码表 从第一个字母进行减法运算 返回的就是这个减法的结果,如果前面几个字母一样会根据两个字符串的长度进行减法运算返回的就是这个减法的结果,如果连个字符串一摸一样 返回的就是0
- public int compareToIgnoreCase(String str) 跟上面一样 只是忽略大小写的比较
案例演示1:把数组中的数据按照指定个格式拼接成一个字符串
举例:int[] arr = {1,2,3}; 拼接结果:"[1, 2, 3]"
package com.westmo.demo;
public class MyTest8 {
public static void main(String[] args) {
int arr[]={1,2,3,4};
String str="[";
for (int i = 0; i < arr.length; i++) {
if(i==arr.length-1){
str=str+arr[i]+"]";
}else{
str=str+arr[i]+",";
}
}
System.out.println(str);
}
}
案例演示2:字符串后面的空格
package com.westmo.demo;
public class MyTest9 {
public static void main(String[] args) {
String str=" a b xc df ";
//去除所有的空格
System.out.println(str.replace(" ",""));
//去除前面的空格
System.out.println(str.replace(str.substring(0, str.indexOf('a')), ""));
//去除后面的空格
System.out.println(str.replace(str.substring(str.lastIndexOf('f'), str.length()), ""));
}
}
案例演示3:在大串中查找小串出现的次数
package com.westmo.demo;
public class MyTest10 {
public static void main(String[] args) {
String str="woaijavawozhenaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagun";
int count=0;
/*int s=str.indexOf("java");
while(s!=-1){
count++;
str=str.substring(s+4);
s=str.indexOf("java");
}
System.out.println(count);*/
String s = str.replace("java", "#");
for (int i = 0; i < s.length(); i++) {
if(s.charAt(i) == '#'){
count++;
}
}
System.out.println(count);
}
}