------- android培训、java培训、期待与您交流! ----------
eclipse的使用和常用API-2
1.Scanner的概述和方法介绍
A:Scanner的概述 是一个简单的文本扫描器,可以使用正则表达式
B:Scanner的构造方法原理
Scanner(InputStream source)
System类下有一个静态的字段:
public static final InputStream in; 标准的输入流,对应着键盘录入。
C:一般方法
hasNextXxx() 判断是否还有下一个输入项,其中Xxx可以是Int,Double等。如果需要判断是否包含下一个字符串,则可以省略Xxx,即hsNext(),next()或nextLine() //此扫描器输入信息中的下一个标记可以解释为默认基数中的一个 int 值,则返回 true。
public static void main (string [] args){
scanner sc=new scanner();
if(sc.hsNextInt()){ //判断输入类型是否为int
int i=sc.nextInt();
systen.out.println(i);
}else{
system.out.println("输入类型有误");
} }
nextXxx() 获取下一个输入项。Xxx的含义和上个方法中的Xxx相同,默认情况下,Scanner使用空格,回车等作为分隔符
2.Scanner获取数据出现的小问题及解决方案
A:两个常用的方法:
public int nextInt():获取一个int类型的值
public String nextLine():获取一个String类型的值 //nextLine()返回一个string类型的数据
B:案例演示
a:先演示获取多个int值,多个String值的情况
b:再演示先获取int值,然后获取String值出现问题 //输入完第一个int值后,直接就开始打印了,不能输入第二个String值
c:问题解决方案
第一种:先获取一个数值后,在创建一个新的键盘录入对象获取字符串。//浪费空间
第二种:把所有的数据都先按照字符串获取,然后要什么,你就对应的转换为什么。(后面讲)
//建议用nextLine()方法获取键盘录入信息,因为是字符串类型,所以你键盘录入什么都可以,不会报错,然后需要什么类型的再转换成什么类型就好了.
3.String类的概述
A:String类的概述
通过JDK提供的API,查看String类的说明
可以看到这样的两句话。
a:字符串字面值"abc"也可以看成是一个字符串对象。
b:字符串是常量,一旦被赋值,就不能被改变。
//String str = "abc" //abc相当于一个对象,将它的地址赋值给了str
str="def" //"def"也相当于一个对象,他将它的地址值赋值给了str,str原来指向的那个对象就变成了垃圾
system.out.println(str); //String类重写了toString返回返回的是该对象本身; 打印引用对象的时候会默认调用toString()方法即str.toString()
4.String类的构造方法
A:常见构造方法
public String():空构造
public String(byte[] bytes):把字节数组转成字符串
public String(byte[] bytes,int index,intlength):把字节数组的一部分转成字符串 (从index位置开始,向后转length个)
public String(char[] value):把字符数组转成字符串 //将字符穿成串转成字符串输出
public String(char[] value,int index,intcount):把字符数组的一部分转成字符串
public String(String original):把字符串常量("jfjhgjh")值转成字符串 (jfjhgjh)
byte[] arr1={97,98,99};
string s2=new string(arr1);
system.out.println(s2); //输出abc
*//基本数据类型比较的是值,引用数据类型比较的是地址值,String是引用数据类型
5.String类的常见面试题
1.判断定义为String类型的s1和s2是否相等
String s1 = "abc";
String s2 = "abc";
System.out.println(s1 == s2); //true,常量池中没有这个字符串对象,就创建一个,如果有直接将该该字符串对象的地址值赋值过去
System.out.println(s1.equals(s2)); //true, equals将此字符串与指定的对象比较。当且仅当该参数不为 null,并且是与此对象表示相同字符序列的 String 对象时,结果才为 true。
2.下面这句话在内存中创建了几个对象?
String s1 = new String("abc"); //创建两个对象,一个在常量池中,一个在堆内存中(copy的副本)
3.判断定义为String类型的s1和s2是否相等
String s1 = newString("abc"); //s1 记录的是堆内存中对象的地址值
String s2 = "abc"; //s2 记录的是常量池中对象的地址值
System.out.println(s1 == s2); ? //false
System.out.println(s1.equals(s2)); ? //true 因为它比较的是abc,不是地址值
4.判断定义为String类型的s1和s2是否相等
String s1 = "a" + "b" +"c";
String s2 = "abc";
System.out.println(s1 == s2); ? //true,java中有常量优化机制,"a" "b" "c" 本身都是字符串常量,在编译的时候它本身就是"abc"字符串,所以在常量池中就创建这么一个"abc"字符串常量,s2用abc,已存在便不用再创建
System.out.println(s1.equals(s2)); ? //true
5.判断定义为String类型的s1和s2是否相等
String s1 = "ab";
String s2 = "abc";
String s3 = s1 + "c";
System.out.println(s3 == s2); //false, 因为s1是变量,所以串联时底层会先创建一个stringBuffer对象,串成abc,再通过toString 方法转换成String类型,将地址给s3
System.out.println(s3.equals(s2)); ? //true
6.String类的判断功能
A:String类的判断功能
boolean equals(Object obj):比较字符串的内容是否相同,区分大小写
//String s1 =" djd"
//String s2 =" djd"
//aystem.out.println(s1.equals(s2)); //true
boolean equalsIgnoreCase(String str):比较字符串的内容是否相同,忽略大小写, 和上面一样,只是不区分大小写
boolean contains(String str):判断大字符串中是否包含小字符串
//String s1 ="我爱heima"
//String s2 ="heima"
//System.out.println(s3.contains(s2)); 输出true
boolean startsWith(String str):判断字符串是否以某个指定的字符串开头
//System.out.println(s1.startsWith(s2)); //s1 我爱heima 是以 s2-heima 开始的吗
boolean endsWith(String str):判断字符串是否以某个指定的字符串结尾
boolean isEmpty():判断字符串是否为空。 //空返回true,不空返回false
* "" 和null的区别:
""是字符串常量,同时也是一个String类的对象,既然是对象当然可以调用String类的方法
null 是空常量,不能调用任何方法,否则会出现空指针异常,null常量可以给任意的引用数据类型赋值
7.模拟登录,给三次机会,并提示还有几次。用户名和密码都是admin
8.String类的获取功能
A:String类的获取功能
int length():获取字符串的长度。即字符的个数
//String s2 ="heima"
//System.out.println(s2.length()); 输出 5 ,河马 输出 2
char charAt(int index):获取指定索引位置的字符, 从0开始数
int indexOf(int ch):返回指定字符在此字符串中第一次出现处的索引。参数可以是int(相应字母或数字的ASCII码值),也可以是字符类型即'a' //如果不存在返回 -1
int indexOf(String str):返回指定字符串在此字符串中第一次出现处的索引。 //返回字符串中第一个字符出现的位置,字符串必须是连着的,否则返回 -1
int indexOf(int ch,int fromIndex):返回指定字符在此字符串中从指定位置后第一次出现处的索引。 //从指定位置向后找
int indexOf(String str,int fromIndex):返回指定字符串在此字符串中从指定位置后第一次出现处的索引。
lastIndexOf //从后向前找
String substring(int start):从指定位置开始截取字符串,默认到末尾。
string s1="heimawudi";
string s2=s1.subString(5); //从索引为5 的地方截取到最后
System.out.println(s2); //输出wudi
String substring(int start,int end):从指定位置开始到指定位置结束截取字符串。 //截取的字符串不包括end位置的字符, 左闭右开
9.案例演示,需求:遍历字符串
10.案例演示,,需求:统计一个字符串中大写字母字符,小写字母字符,数字字符出现的次数,其他字符出现的次数。如:ABCDEabcd123456!@#$%^
11.String类的转换功能
A:String的转换功能:
byte[] getBytes():通过gbk码表把字符串转换为字节数组。
char[] toCharArray():把字符串转换为字符数组//遍历数组的另一种方式,将字符一个一个输出
static String valueOf(char[] chs):可以把任意类字符数组转成字符串。
static String valueOf(int i):把int类型的数据转成字符串。
注意:String类的valueOf方法可以把任意类型的数据转成字符串。
String toLowerCase():把字符串转成小写。(了解)
String toUpperCase():把字符串转成大写。
String concat(String str):把字符串拼接。//s3.concat(s4), 也可以用 + 拼接
12.按要求转换字符(链式编程)
A:案例演示,需求:把一个字符串的首字母转成大写,其余为小写。(只考虑英文大小写字母字符)
13_常见对象(把数组转成字符串)
A:案例演示.需求:把数组中的数据按照指定个格式拼接成一个字符串
举例:int[] arr = {1,2,3}; 输出结果: "[1,2, 3]"
14_常见对象(String类的其他功能)
A:String的替换功能及案例演示
String replace(char old,char new)
String replace(String old,String new)
B:String的去除字符串两端空格及案例演示
String trim()
C:String的按字典顺序比较两个字符串及案例演示
int compareTo(String str)(暂时不用掌握) //返回int数
int compareToIgnoreCase(String str)(了解) //不区分大小写
15.案例演示,需求:把字符串反转
举例:键盘录入"abc" 输出结果:"cba"
16.案例演示,统计大串中小串出现的次数