keyword
- math类和math类的经典算法
- Object类
- Scnner类
- String类和String类的经典算法
- Stringbuffer和Stringbuilder类
- Arrays类
math类
Math是关于数学运算方面的工具类。其所有的成员变量和成员方法,都是用静态来修饰,我们可以直接通过类名直接调用(Math是java.lang包下的类,可以不用导包)。
用Math类获取随机数的方法:Math.random() /*生成随机小数,范围在0~1之间*/
math类的经典算法(猜数字游戏)
游戏规则:输入一个1~100内的数字,代码会根据输入的数字与随机生成的数字进行比较,若比数字大则会提示大,若比数字小则会提示小,若与数字相等则会提示猜对了。总共有10次机会。
代码如下
public class GassnumberGame {
public static void main(String[] args) {
System.out.println("这是一个猜数字的游戏,你有10次机会,在0-------100之间");
Scanner sc = new Scanner(System.in);
System.out.println("确定进入游戏 n/y");
String s = sc.nextLine();
if (s.equals("y")) {
int randomnum = (int) (Math.random()*100)+1;
for (int i = 1; i <=10; i++) {
Scanner sc1 = new Scanner(System.in);
System.out.println("请输入你认为可能的数");
double gassnum = sc1.nextDouble();
if (gassnum>randomnum){
System.out.println("你猜的数字大了,你还剩 "+(10-i)+" 次机会");
}else if (gassnum<randomnum){
System.out.println("你猜的数字小了,你还剩 "+(10-i)+" 次机会");
}else {
System.out.println("恭喜你!猜中了,这个数就是 " + gassnum);
break;
}
}
}else {return ;}
}
}
Object类
Object,是类层次结构的根类。所有类都是直接或者间接继承该类。
构造方法:public Object()
常用的成员方法
-
public int hashCode():
返回该对象的哈希码值
- 默认情况下,该方法会根据对象的地址来计算
- 不同对象的hashCode()一般来说不会相同。但是,同一个对象的hashCode()值肯定相同
- 不是对象的实际地址值,可以理解为逻辑地址值 -
public final Class getClass():
返回此 Object 的运行时类
- 可以通过Class类中的一个方法,获取对象的真实类的全名称。该方法为:public String getName() -
public String toString():
返回该对象的字符串表示
- 它的值等于: getClass().getName() + ‘@’ + Integer.toHexString(hashCode())
- 由于默认情况下的数据对我们来说没有意义,一般建议重写该方法
- 直接输出对应的名称,就是调用对象的toString()方法 -
public boolean equals(Object obj):
指示其他某个对象是否与此对象“相等”
- 默认情况下比较的是对象的引用是否相同
- 由于比较对象的引用没有意义,一般建议重写该方法。用于比较成员变量的值是否相等 -
protected Object clone() throws CloneNotSupportedException:
创建并返回此对象的一个副本
- clone()的权限修饰符是受保护的,在使用的时候,要让该类重写该方法,并把该方法的权限修饰符改为public
- 使用clone()方法,默认采用的是浅克隆的方式(浅克隆指的是克隆一个对象的时候,如果被克隆的对象中维护了另外一个类的对象,这时候只是克隆另外一个对象的地址,而没有把另外一个对象也克隆一份。另外,对象的浅克隆不会调用构造方法)
- 深克隆采用IO流来实现。使用 ObjectOutputStream 将对象写入文件中,然后再用ObjectInputStream读取回来
Scanner类
Scanner,JDK5以后用于获取用户的键盘输入。
构造方法:Scanner(InputStream source)
:方法里的参数一般是System类下的静态字段
public static final InputStream in
,这是标准的输入流,对应着键盘录入。
常用的成员方法
-
hasNextXxx()
:判断下一个是否是某种类型的元素
- 其中,Xxx可以是Int,Double等
- 如果需要判断是否包含下一个字符串,则可以省略Xxx -
nextXxx()
:获取下一个输入项
- Xxx的含义和上个方法中的Xxx相同
String类
String,由多个字符组成的字符序列。
特点
-
字符串字面值"abc"也可以看成是一个字符串对象
-
字符串是常量,一旦被创建,就不能被改变,能够被改变的只有对象的地址值
练习题:下面这条语句一共创建了多少个对象:String s = “a”+“b”+”c”; 分别都是什么?
答案:5个对象
分别是 “a” , “b” , “c” , “ab” , “abc”
因为字符串的特点是一旦被创建就不能被改变,所有在使用常量进行相加的时候,都是在创建新的字符串对象,最后在把字符串"abc"这个常量值赋值给引用变量s
构造方法
-
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)
:把字符串常量值转成字符串
常用的成员方法
-
判断功能
-
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 boolean equals(Object obj)
:比较字符串的内容是否相同,区分大小写
-
-
获取功能
-
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)
:从指定位置开始到指定位置结束截取字符串
-
-
转换功能
-
public byte[] getBytes()
:把字符串转换为字节数组 -
public char[] toCharArray()
:把字符串转换为字符数组 -
public static String valueOf(char[] chs)
:把字符数组转成字符串 -
public static String valueOf(int i)
:把int类型的数据转成字符串(int类型以外的其他类型也可以转换成字符串) -
public String toLowerCase()
:把字符串转成小写 -
public String toUpperCase()
:把字符串转成大写 -
public String concat(String str)
:把字符串拼接
-
-
替换功能
-
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)
:跟上面一样,只是忽略大小写的比较
-
String类的经典算法
- 判断字符串中的字符只有一个
代码如下:
//思想:利用正向遍历a的索引值和反向遍历a的索引值判断是否相同,从而可以判断输入的字符串中是否存在一个a字符
public class StringDemo1 {
public static void main(String[] args) {
String str = new String();
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串");
str = sc.nextLine();
if (str.indexOf("a")==str.lastIndexOf("a")){
System.out.println("这个字符串只有一个a字符");
}else {
System.out.println("这个字符串不止有一个a字符");
}
}
}
- 反转录入字符串
要求:从键盘上输入abcde,输出edcba
代码如下
public class ArrayDemo1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串");
String s = sc.nextLine();
String a="";
for (int i = s.length()-1; i >0; i--)
//利用for循环进行反向的字符串的遍历,
//并经反向遍历的字符串通过charat方法将反向遍历
//的字符串中的字符提取出来并进行拼节
{
a+= s.charAt(i);
}
System.out.println(a);
}
}
- 字符串的大小写转换
要求:从键盘上输入abcde,输出ABCDE 代码如下
public class StringDemo2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一段字符串");
String s = sc.nextLine().toUpperCase();
System.out.println(s);
}
}
- 从字符串中寻找指定字符串
要求:从键盘上输入woyaoxuejava,xihuanjava,aijava,javajavawozuiai,判断其中出现了几次java,代码如下:
方法一:
public class StringDemo3 {
public static void main(String[] args) {
String str = "woyaoxuejava,xihuanjava,aijava,javajavawozuiai";
int num = 0;//记录出现“java”出现的次数
for (int i = 0; i < str.length(); i++) {
int index = str.indexOf("java");
if (index != -1) {
str = str.substring(index + 4);
//利用索引值结合截取字符串的方法
//将截取的新的字符串给str
num++;//计数器每运行一次语句自增一次
}
}
System.out.println("java在字符串中出现了"+num+"次");
}
}
方法二:
public class StringDemo4 {
public static void main(String[] args) {
String str = "woyaoxuejava,xihuanjava,aijava,javajavawozuiai";
int len1 = str.length();
//统计原始字符串的长度
int len2 = str.replace("java", "").length();
//统计替换后的字符串的长度
int len3=len1-len2;
System.out.println("在字符串中存在" + (len3 / 4) + "个java字符串");
}
}
- 判断字符串中大写字母、小写字母、数字的个数
要求:从键盘上输入数据,统计键盘录入的字符串中包含大写字母、小写字母、数字的个数,代码如下:
public class StringDemo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一段字符串");
String s = sc.nextLine();
int a,b,c;
a=0;b=0;c=0;//定义一个计数器
//a表示数字的个数
//b表示大写字母的个数
//c表示小写字母的个数
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i)>='0'&&s.charAt(i)<='9'){
a++;
}else if (s.charAt(i)>='A'&&s.charAt(i)<='Z'){
b++;
}else if (s.charAt(i)>='a'&&s.charAt(i)<='z') {
c++;
}
}
System.out.println("数字的个数有" + a + "个");
System.out.println("大写字母的个数有" + b+ "个");
System.out.println("小写字母的个数有" + c + "个");
}
}
- 将字符串“ asjkdbkasbdk ”只去除左边的空格(在大串中查找小串的位置)
public class StringDemo7 {
public static void main(String[] args) {
//要求:只去除左端的空串
String str=" asjkdbkasbdk ";
String trim = str.trim();
int i = str.indexOf(trim);
String substring = str.substring(i);
//String substring1 = str.substring(str.indexOf(str.trim());链式编程
System.out.println(substring);
}
}
Stringbuffer类
简述stringbuffer类,就是提供了一个容器用来存储多个元素,并且返回的元素也叠加到原来的容器中(可以将Stringbuffer想象成为一个水杯)。
创建一个String类型的对象,即耗时间还浪费工作空间。
单线程与多线程的安全问题(可以用医院进行举例)。
单线程:一个医生叫一个病人进诊所进行就诊,效率比较慢,但是个人隐私可以得到保障,比较安全。
多线程(不止有main()方法,还有其他的进出口):一个医生同时叫两个病人进行就诊,同时对两名病人进行号脉等,会对数据的信息造成泄露,效率比较快,但是不是很安全。
-
构造方法:
public StringBuffer()
: 无参构造方法
public StringBuffer(int capacity):
指定容量的字符串缓冲区对象(类似于水杯的容量可以任意赋值)
public StringBuffer(String str)
: 指定字符串内容的字符串缓冲区对象 -
添加功能:
public StringBuffer append(String str)
:可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身
public StringBuffer insert(int offset,String str)
:在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身 -
删除功能:
public StringBuffer deleteCharAt(int index)
:删除指定位置的字符,并返回本身
public StringBuffer delete(int start,intend)
:删除从指定位置开始指定位置结束的内容,并返回本身 -
替换和反转功能
public StringBuffer replace(int start,int end,String str)
:从start开始到end用str替换
public StringBuffer reverse():
字符串反转 -
截取功能及注意事项
public String substring(int start):
从指定位置截取到末尾
public String substring(int start,int end)
:截取从指定位置开始到结束位置,包括开始位置,不包括结束位置
注意:返回值类型不再是StringBuffer本身,而是String类
StringBuffer和String的相互转换
- String – StringBuffer
- a:通过构造方法
- b:通过append()方法
- StringBuffer – String
- a: 使用substring方法
- b:通过构造方法
- c:通过toString()方法
数组转成字符串举例:
public class StringbufferDemo {
public static void main(String[] args) {
//需求:把数组中的数据按照指定个格式拼接成一个字符串
// 举例:
// int[] arr = {1,2,3};
// 输出结果:
// "[1, 2, 3]"
// 用StringBuffer的功能实现
int[] arr = {1, 2, 3};
StringBuffer strb = new StringBuffer("[");
for (int i = 0; i < arr.length; i++) {
if (i == arr.length - 1) {
strb.append(arr[i]).append("]");
} else {
strb.append(arr[i]).append(",");
}
}
String str=strb.toString();
//利用toString方法调用地址存放的字符串
System.out.println(str);
}
}
字符串反转实例
public class StringBufferDemo2 {
public static void main(String[] args) {
//需求:把字符串反转
// 举例:键盘录入"abc"
// 输出结果:"cba"
// 用StringBuffer的功能实现
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
StringBuffer strb = new StringBuffer(s);
strb.reverse();
System.out.println(strb);
}
}
Arrays类
public static String toString(int[] a)
:将数组输出为字符数组
public static void sort(int[] a)
:将数组正向排列
public static int binarySearch
(int[] a,int key)key是需要搜索的数:二分法查找数组(条件:数列必须按从大到小的顺序)
public class ArraysDemo {
public static void main(String[] args) {
int arr[]={1,2,3,4,5,6,7,8,9};
int i = Arrays.binarySearch(arr, 3);
System.out.println(i);
}
}