----------- android
培训、java培训、java学习型技术博客、期待与您交流! ---------
在使用S
canner做键盘录入的时候会出现什么问题,怎么解决?
先接收int类型,后接受string类型,程序
异常。
1、重新创建一个Scanner对象。
2、都用字符串接收,然后把其中一个对应的转成int类型。
String s ="";
String s1 = null;
String类:
概念:由多个字符组成的一串数据。
构造方法:
String()
String(byte[] bytes)
String(byte[] bytes,int index,int length)
字符串索引越界异常。 StringIndexOutOfBoundsException
String(char[] value)
String(char[] value,int index,int length)
String(String str)
直接赋值 String s ="zhangsan";
1. 怎么
理解字符串一旦被创建不能改变,这是一个常见的面试题。
我们知道,字符串他的值是存在方法区的常量池里边。所以,再给字符串对象赋值的时候,会先去常量池里边找有没有这个值。
如果有,直接把常量池里边的地址值拿过来,如果没有这个值,就创建一个空间,来存这个值。
也就是说,这里的不能改变指的是常量池里边的值不能发生改变,而不是说对象的引用(地址值)不能发生改变。
2. String s1 = new String(“abc”);
String s2 = “abc”;
s1和s2有区别吗?
s1在
内存里边其实有两个对象。(堆内存一个,常量池一个。)
s2在内存里边只有一个对象(在常量池里边。)
成员方法:
判断功能(首尾中空加判断)
public boolean startsWith(String str)
public boolean endsWith(String str)
public boolean contains(String str)
public boolean isEmpty()
public boolean equals(Object str) //区分大小写的
public boolean equalsIgnoreCase(String str) //忽略大小写的。
模拟登录,从控制台输入用户名密码,如果用户名密码正确的话,提示登陆成功,否则提示登陆失败。登陆过程中只能尝试3次。
面相过程思路:
1、已经存在有用户名和密码。用String标记即可。
2、键盘录入数据,用户名和密码。
3、把数据进行比较。(if,equals)
匹配:成功。
不匹配:
提示剩余次数。
次数为零,账号锁定。
4、用
循环改进(for)。
面向对象:
1、多了一个用户类。
属性:用户名,密码
成员方法:返回值是boolean类型,参数是两个字符串(用户名,密码)
2、键盘录入数据,用户名和密码。
3、把数据进行比较。(直接调用用户类的判断方法)
匹配:成功。
不匹配:
提示剩余次数。
次数为零,账号锁定。
4、用循环改进(for)。
获取功能(截长取位取元素)
public String substring(int index); 从指定位置开始截取
public String substring(int start,int end); 包左不包右。
public int length();
public int indexOf(int ch); 根据给定的元素,找出其第一次出现的索引。
public int indexOf(int ch,int fromIndex);
public int indexOf(String str); 找不到呢? 返回-1。
public int indexOf(String str,int fromindex);
public char charAt(int index); 根据给定的索引,找出对应位置的元素
查看下面需求,思考思路(不要求写出代码)
给定一个字符串常量,统计该串中有大写字母、小写字母、数字各有多少个。
举例:
Hello12345World
大写 : 2个
小写 : 8个
数字 : 5个
思路:
1、定义三个统计变量
2、遍历字符串,拿到里边每一个元素。
3、判断当前元素属于那个范围,是哪个范围,那个统计变量++。
4、输出结果。
转换功能(大小拼串转数组)
public String toUpperCase(); 把字符串中的英文字母转成其对应的大写形式。
public String toLowerCase();
public String concat(String str); 其实这个方法就相当于 +的连接作用。
public static String copyValueOf(char[] ch) //把一个字符数组转成字符串,注意,这个方法是没有
重载的。
public static String valueOf(char[] ch) //把一个字符数组转成字符串,有重载的。
public static String valueOf(int i) //可以传一个基本类型,
public char[] toCharArray(); //必须记住。
public byte[] getBytes();
查看下面需求,完成代码
需求 : 把字符串的首字母转成大写,其余为小写
举例:
helloWorld
转化后结果:
Helloworld
思路:
1、截取字符串中的首字母。
2、截取字符串中,除首字母之外的其他所有字符。
3、把1转成大写,把2转成小写。然后拼接。
4、输出结果。
其他功能(除空切换字典排)
String trim(); 移除字符串首尾空格。
String[] split(String regex); 按照给定的字符串切割原字符串。 "abc123 cab123 123c"
"abc123 cab123 1123c" 按照1截 “abc” + "23 cab" + "23 " +"23c"
String replace(char oldChar,char newChar);
String replace(String oldStr,String newStr);
字典的顺序,就是字母a-z的顺序。
int compareTo(String str); //区分大小写的。 A-Z:65-90 a-z:97-122
int compaerToIgnoreCase(String str); // 不区分大小写的。 this-str
思考:设计一个方法,用于获取一个字符串中指定子串出现的次数。
比如说“hanbasdnbafllgnbahjnbakqqqqlnbaxinba”中有几个nba?
思路:
1、定义两个串,以及一个统计变量。
2、在大串中查找小串第一出现的索引。
如果没有,索引是-1.这个时候,将统计变量返回。
如果不是-1,说明大串中有小串。
统计变量++,然后从(index+小串的长度)处开始截取字符串。在新的大串中继续查找小串(重复做步骤2)。
冒泡排序原理:
相邻元素两两比较,大的往后走。这样的话,第一次(轮)比较完毕后,最大值,就在最大索引。
int[] arr = {1,4,5,6,7,2,3};
for() // 控制比较的次数(轮)
{
for() //控制每轮比较的次数
}
需求:
对字符串中字符进行自然排序(abcd...):
例如:
把 "basckd" --变成 "abcdks"
1、把字符串转成字符数组。 两种方法。
2、把转后的字符数组进行排序(冒泡排序)。
3、把排序后的字符数组转成字符串。 (
三种方法,构造,copyValueOf(),valueOf())
需求:已知int[] arr = {37, 92, 54, 18, 76};
求元素92索引是多少? arr[i]==92
1、把要比较的值和数组中间元素进行比较。如果相等,直接返回该索引。
如果不相等呢? 看是比中间的元素大还是小。
2、如果大。
在数组的右边做与1相同的步骤。(把最小索引改成中间索引+1)
如果小呢?
在数组的左边做与1相同的步骤。(把最大索引改成中间索引-1)。
3、当最小的索引比最大的索引还大,直接return。
Arrays类:
概念:针对数组操作的一个类。
我们在开发的时候,对数组的常见操作就是排序和查找。
public static String toString(int[] value);把一个int类型的数组转成字符串。
public static void sort(int[] value);对一个int类型数组进行排序。
public static int binarySearch(int[] value,int key);二分查找。
System类:
该类不能被实例化。
public static void exit(int status); 终止当前正在运行的
JVM。
status代表的是状态码。0代表的是异常终止。
public static long currentTimeMills() 返回以毫秒值为单位的当前时间。
1s=1000毫秒;
public static void arraycopy(Object src,int srcPos,Object dest, int destPos,int length)
复制数组。从数组src的第srcPos开始复制,复制length个。到数组dest数组的第destPos位置开始,外后覆盖。length个。
StringBuffer:
字符串缓冲区类。
他和String有什么区别?
无参,带int,字符串
字符串和字符串缓冲区类之间的转换。 通过构造。
int length() 获取实际长度。
int capacity() 获取理论长度。
添加功能:
public StringBuffer append(int value); 添加元素,在末尾。
public StringBuffer insert(int index,int value); 在指定位置,插入元素。
删除功能:
public StringBuffer delete(int start,int end); 删除指定区间之内的所有元素(包左不包右。)
public StringBuffer deleteCharAt(int index); 删除指定索引处的元素。
StringBuffer replace(int start, int end, String str)把开始到结束位置的字符用一个新的字符串给替换。
String substring(int start):从指定位置到末尾截取
String substring(int start, int end): 从指定位置到结束位置截取
StringBuffer reverse()将此字符序列用其反转形式取代
设计一个方法,实现从键盘录入一个字符串String s = “abcde”;就能获取一个和s相反的字符串,也就是 “edcba”,并打印在控制台上。
思路:
第一种方法:
1、把字符串转成字符数组。
2、数组倒序输出。
第二种方法:
1、先把字符串转成StringBuffer类型。
2、调用StringBuffer类的reverse() 方法进行反转。
3、把反转后的StringBuffer对象转成String类型。
4、输出结果。
面试题:
1.public static void main(String[] args)
{
String s = "abc";
change(s);
System.out.println(s); //abc
}
public static void change(String s)
{
s += "hello"; s= "abc"+""hello""
}
2.public static void main(String[] args) {
String s1 = "a";
String s2 = "b";
String s3 = "ab";
System.out.println(s3 == s1 + s2); //false true
System.out.println(s3 == "a" + "b"); //true false
}
Integer类:
它是基本类型int类型对应的包装类。
public static final int MAX_VALUE; int范围内的最大值
public static final int MIN_VALUE 。。。。最小值。
public static String toBinaryString(int value); 把int类型的数据转成其对应的
二进制形式
public static String toOctalString(int value); 八进制
public static String toHexString(int value); 十六进制
其他基本类型对应的包装类:
char Character
构造方法:
Integer(int value); 把int类型的值转成Integer类型的对象。
Integer(String value); 把一个String的字符串转成Integer类型的对象。
注意:这个里的字符串必须是由数字字符组成的。不然会报错。 NumberFormatException:数字格式化异常。
现在有一个int a = 100;, 我们怎么把这个整数转换为字符串String s = “100”?反过来呢?
int类型转String类型:
1、+双引号。 String s = a +""; ???
2、String.valueOf(); 要求掌握
3、Integer i = new Integer(a);
i.toString();
4、直接调用Integer.toString(a); 要求掌握
String类型转int类型:
1、调用Integer类的Integer(String str)这个构造。
Integer i = new Integer(str);
i.intValue(); 要求咱们大家理解就可以了。
2、Integer.parseInt(str); 要求掌握,必须要记住。
一个字符串“23 98 71 54 60”(数字之间通过空格分隔,并且是没有大小顺序的),设计一个功能,把这个字符串排序后变成如下字符串:"23 54 60 71 98"
思路:
1、先通过切割空格,把字符串转成
字符串数组。
2、把字符串数组转成int类型的数组。通过for循环变量,然后通过Integer.parseInt(str);
3、对int类型的数组进行排序。
4、把排序后的int类型的数组转成字符串。
int i = 100;
Integer ii = new Integer(i);
Integer in = 100;
JDK5.0以后Integer类的新特性:
自动装箱:把基本类型转成引用类型。
自动拆箱:把引用类型转成基本类型。
开发原则:只要是对象,就先做不为null判断。
Integer i1 = new Integer(127);
Integer i2 = new Integer(127);
System.out.println(i1 == i2); //false
System.out.println(i1.equals(i2)); //true
System.out.println("--------");
Integer i3 = new Integer(128);
Integer i4 = new Integer(128);
System.out.println(i3 == i4); //false
System.out.println(i3.equals(i4)); //true
Integer i5 = 128;
Integer i6 = 128;
System.out.println(i5 == i6); //false
System.out.println(i5.equals(i6)); //true
System.out.println("--------");
Integer i7 = 127;
Integer i8 = 127;
System.out.println(i7 == i8); //true
System.out.println(i7.equals(i8)); //true
Byte常量池: -128-127
byte范围内的值,直接赋值给Integer类型的时候,是直接从byte常量池里边取的值。
(因为计算机最基本的存储单位是字节。)
Java最基本的单位是什么? 类。
Date类:
java.util.Date;
java.sql.Date;
描述时间,指的是当前系统时间,精确到毫秒。
构造方法:
Date()
Date(long time)
成员方法:
public void setTime(long time);
public long getTime();
Date 转 long
d.getTime();
long 转 Date
1、通过构造。
2、通过setTime()方法赋值。
还可以通过哪种方式获取当前的毫秒值?
DateFormat:抽象类。对日期进行格式化的。
格式化:
把日期对象Date,转换成字符串。
思路:
1、我得有一个日期对象。
2、我得有一个具有格式化功能的对象。
3、调用他的方法(format())
public final String format(Date date)
4、输出
解析:
把字符串解析成Date对象。
public Date parse(String str);
思路:
"2015-4-8 10:50:40"
1、我肯定要有一个要被解析的字符串。
2、创建一个跟字符串格式一致的SmipleDateFormat对象。
3、调parse方法。
4、输出结果。
日期的常见格式:
yyyy年MM月dd HH:mm:ss
HH:mm:ss
Calender类:
日历类。我们可以通过它获取到任意的一个日历字段。然后可以根据我们的需求来拼接。
Calendar cd = Calendar.getInstace(); //创建日历类对象。
获取日历字段:
public int get(int fieds) //注意:参数是日历字段
日历字段:
年: public static final int YEAR
月:....MONTH (他的区间是0到11,所以,我们如果想按照我们
习惯的模式来输出的话,需要+1)
日:DATE
设计一个功能,用户在控制台输入任意一年,就能计算出当年2月份有多少天,并打印在控制台上。
思路1:
1、能被4整除,但是不能被100整除
2、能400整除
思路2:
1、把日期设置为用户输的年份的3月1日。
public final void set(int year,int month,int day)
2、把设置好的时间,往前推一天。得到的就是2月的最后一天。
public abstract void add(int field,int value) //形参:第一个是日历字段,第二个是一个int类型的值。
----------- android培训、java培训、java学习型技术博客、期待与您交流! ---------