Scanner类
概述:
- 用于扫描用户键盘文本输入的实用方法
- Scanner的构造方法原理
Scanner(InputStream source)
System类下有一个静态的字段:
public static final InputStream in; 标准的输入流,对应着键盘录入。
常见对象(Scanner类的hasNextXxx()和nextXxx()
hasNextXxx() 判断下一个是否是某种类型的元素,其中Xxx可以是Int,Double等。
如果需要判断是否包含下一个字符串,则可以省略Xxx
nextXxx() 获取下一个输入项。Xxx的含义和上个方法中的Xxx相同
public class MyTest {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("请输入一个整数");
boolean b = scanner.hasNextInt(); //
if (b) {
int i = scanner.nextInt();
System.out.println(i);
break;
} else {
System.out.println("你录入的类型不正确,请重新输入");
scanner = new Scanner(System.in);
}
}
}
}
注意:
先录入整数,再用nextLine()录入字符串时有个小bug,字符串就无法录入了,解决方法,可以在录入字符串时,再创建一个新的Scanner对象
String类
概述:
字符串在方法区的常量池中存储
String 类代表字符串。Java 程序中的所有字符串字面值(如 “abc” )都作为此类的实例实现。
字符串是常量;它们的值在创建之后不能更改。
String s = new String(“hello”)和String s = “hello”;的区别
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类常用的获取功能
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): 从指定位置开始到指定位置结束截取字符串。
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): 把字符串拼接。
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) 跟上面一样 只是忽略大小写的比较
在大串中查找小串出现的次数代码实现
public class MyTest { public static void main(String[] args) {
//需求:统计大串中小串出现的次数
//举例:
//"woaijavawozhenaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagun”中java出现了5次
String maxStr = "woaijavawozhenaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagun";
String minStr = "java"; //定义一个统计变量
int count = 0;
//找java字符串第一次出现的索引
int index = maxStr.indexOf(minStr);
while (index != -1) {
count++;
;
maxStr = maxStr.substring(index + 4);
index = maxStr.indexOf(minStr);
}
System.out.println("java有" + count + "个");
}
}
StringBuffer
概述:
- 线程安全的长度可变的字符序列
- 我们如果对字符串进行拼接擦做,每次拼接都会构建一个新的String对象,既耗时,又浪费空间而StringBuffer就可以解决这个问题。
StringBuffer类的构造方法
- public StringBuffer(): 无参构造方法
- public StringBuffer(int capacity): 指定容量的字符串缓冲区对象
- public StringBuffer(String str): 指定字符串内容的字符串缓冲区对象
- public int capacity():返回当前容量。 理论值
- public int length():返回长度(字符数)。 实际值
StringBuffer sb = new StringBuffer();
//往字符串缓存区中追加数据
sb.append("99999999999999");
int capacity = sb.capacity();//获取字符串缓冲去的容量
System.out.println(capacity);// 16
//length() 获取容器中实际的字符长度
int length = sb.length();
System.out.println(length);//14
String s = sb.toString();
System.out.println(s);
StringBuffer的添加功能
- public StringBuffer append(String str): 可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身
- public StringBuffer insert(int offset,String str):在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身
StringBuffer的删除功能
- public StringBuffer deleteCharAt(int index):删除指定位置的字符,并返回本身
- public StringBuffer delete(int start,int end):删除从指定位置开始指定位置结束的内容,并返回本身
StringBuffer的替换和反转功能
-
public StringBuffer replace(int start,int end,String str): 从start开始到end用str替换
-
public StringBuffer reverse(): 字符串反转public
public static void main(String[] args) {
//StringBuffer(String str)
//构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容。
StringBuffer sb = new StringBuffer("abcdefgh");
sb.append("你好世界金卡九分");
//替换完之后,返回的还是字符串本身
StringBuffer sb2 = sb.replace(8, 12, "哈哈哈哈"); //含头,不含尾
System.out.println(sb);//abcdefgh哈哈哈哈金卡九分
sb.reverse(); //反转容器中的字符序列
System.out.println(sb);//分九卡金哈哈哈哈hgfedcba
}
StringBuffer的截取功能及注意事项
- public String substring(int start): 从指定位置截取到末尾
- public String substring(int start,int end): 截取从指定位置开始到结束位置,包括开始位置,不包括结束位置
- 返回值类型不再是StringBuffer本身,返回值是你截取的字符串
StringBuffer和String的相互转换
- String – StringBuffer
- 通过构造方法
- 通过append()方法
- StringBuffer – String
- 使用substring方法
- 通过构造方法
- 通过toString()方法
String – StringBuffer 代码演示:
public static void main(String[] args) {
//把字符串类型转换成字符串缓冲去类型
// String-- StringBuffer
String str="abc";
//方式1
StringBuffer sb = new StringBuffer(str);
//方式2
StringBuffer sb2 = new StringBuffer().append(str);
//方式3
StringBuffer sb3 = new StringBuffer().insert(0, str);
}
StringBuffer – String代码演示:
public static void main(String[] args) {
// StringBuffer-----String
//方式1
StringBuffer sb= new StringBuffer().append(100);
String s = sb.toString();
System.out.println(s);
//方式2
String s1 = sb.substring(0);
System.out.println(s1);
//方式3
String s3=new String(sb);
System.out.println(s3);
}
String和StringBuffer分别作为参数传递
- 基本数据类型,作为参数传递,形参的改变,不影响实参
- 引用数据类型作为参数传递,形参的改变会影响实参
- String类型虽说是引用数据类型,但是传参特点跟基本类型一样
public static void main(String[] args) {
set(s);
System.out.println(s);//abc
StringBuffer sb = new StringBuffer("123");
StringBuffer sb2=set(sb);
System.out.println(sb.toString());//321
System.out.println(sb2.toString());//321
System.out.println(sb2==sb);//StringBuffer重写了equals方法
}
private static void set(String s) {
System.out.println(s); //abcbbb
s=s+"bbb";
System.out.println(s);
}
private static StringBuffer set(StringBuffer sb) {
sb.reverse();//321
return sb;
}