Java常用类
1.Math类
Math适用于数学计算的工具类
对于工具类而言,里面的大部分成员都是静态的static
自带常量
- static double E :自然对数
- static double PI:圆周率
public class Test{
public static void main(String[] args){
System.out.println(Math.E);
System.out.println(Math.PI);
}
}
取整方法
- static double ceil(double a):向上取整
- static double floor(double a):向下取整
- static long round(double a):四舍五入
public class Test{
public static void main(String[] args){
System.out.println(Math.ceil(3.1));
System.out.println(Math.ceil(3.9));
System.out.println(Math.floor(3.1));
System.out.println(Math.floor(3.9));
System.out.println(Math.round(3.1));
System.out.println(Math.round(3.9));
}
}
三角函数
- static double sin(double a):正弦函数 参数是弧度制
- static double cos(double a):余弦函数 参数是弧度制
- static double tan(double a)正切弦函数 参数是弧度制
- static double toDegrees(double a):将弧度转为角度
- static double toRadians(double angles):将角度转为弧度
- static double asin(double a): 反正弦函数
- static double acos(double a): 反余弦函数
- static double atan(double a): 反正切函数
指数函数
-
static double pow(double a,double b):求a的b次幂
-
static double sqrt(double a):求a的平方根
-
static double cbrt(double a):求a的立方根
其他方法
- static double abs(double a):求a的绝对值
- static double hypot(delt X,delt yY:返回sqrt(x2+y2)
2.Scanner类
主要负责数据输入的类,底层是和io流相关
- String next():获取直到遇到空格为止的一个字符串
- String nextLine():获取直到遇到回车为止的一个字符串
- int nextInt()
- double nextDouble()
- boolean nextBoolean()
- float nexFloat()
3.Random类
主要用于产生随机数
- boolean nextBoolean():随机产生布尔类型值
- double nextDouble():随机生成0.0~1.0之间的小数
- double nextInt():随机生成一个整数0~2de32次方的整数
- double nextInt(n):随机产生一个整数[0,1)的整数
4.String类
String是一个类,它描述的是字符串。并且在java代码中,所有字符串常量(字符串字面量)都是S听类的一个实例对象。并且,字符串一旦创建,则不可修改,不可修改其长度,也不可修改其内容。所以对字符串内容的改变,不能在原地修改,只能重新创建一个字符串。
public class Test{
public statuc void main(String[] args){
String s1 = "abc";
String s2 = "ab" + "dc";
//上述代码一共有几个字符串?
//四个"abc" "ab" "dc" "abdc"
}
}
获取相关操作
- char charAt(int index):获取指定角标index处的字符
- int indexOf(int ch):获取指定字符(编码)在字符串中第一次(从左到右)出现的地方返回的是角标、如果是-1表示不存在
- int lastIndexOf(int ch):获取指定字符(编码)在本字符串中第一次(从右到左)出现的地方返回的是角标
- Int indexOf(String str):获取指定字符串在本字符串中第一次(从左到右)出现的地方返回的是角标
- int lastIndexOf(String str):获取指定字符串在本字符串中第一次(从右到左)出现的地方返回的是角标
- int length():获取字符串的长度(字符的个数)
- String[] split(String regex):将字符串按照regex的定义进行切割(regex指的是正则表达式)
- String substring(int beginIndex):截取一段子字符串,从beginIndex开始到结尾
- Stirng subString(int beginIndex,int endIndex):截取一段子字符串,从beginIndex开始到endIndex(不包含)
public class Test{
public static void main(String[] args){
String str = "banana orange apple watermelon";
System.out.println(str.charAt(1)); //'a'
System.out.println(str.indexOf('o')); //7
System.out.println(str.lastIndexof(97)); //21
System.out.println(str.length()); //30
System.out.println(str.subString(6)); // orange apple watermelon
System.out.println(str.subString(9,13)); //ange
String[] arr = str.split(" ");
System.out.println(arr[2]); //apple
}
}
判断相关操作
-
int compareTo(String anotherString):按照字典顺序比较两个字符串的大小
-
boolean contains(String another):判断当前字符串中是否包含指定字符串another
-
boolean equals(String another):当前字符串与指定字符串内容是否相同
-
boolean isEmpty():判断当前字符串是否为空,length() == 0
-
boolean startWith(String prefix):判断该字符串是否以prefix开头
-
boolean endsWith(String sunfix):判断该字符串是否以sunfix结尾
public class Test{ public static void main(String[] args){ String s1 = "abc"; String s2 = "bcd"; System.out.println(s1.compareTo(s2)); //如果结果<0 s1在s2之前 ==0 s1和s2一样 >0s1在s2之后 System.out.println("hehe".compareTo("hehe")); System.out.println("lala".equals("lala")); String s3 = "啦啦啦"; System.out.println(s3.endsWith("啦")); System.out.println(s3.startWith("啦")); } }
修改相关
- String toLowerCase():将字符串中所有的英文字母全部变为小写
- String toUpperCase():将字符串中所有的英文字母全部变为大写
- String trim():将字符串中两端多余的空格删掉
- String replace(char oldCh,char newCh):将字符串中oldCh字符替换成newCh字符
如何来自己删除字符串中左右两端出现的空格,不要trim
public class Test{
public static void main(String[] args){
String str = " 123123 123 ";
//删掉左右空格不用trim,"123123 123"
int l = 0;//左标记
int r = str.length() - 1;//右标记
while(str.charAt(l) == ' '){
l++;
}
while(str.charAt(r) == ' '){
r--;
}
System.out.println("[" + str.substring(l,r + 1) + "]");
}
}
在字符串"abcbcbcbcbcbc"中统计"bcb"出现的次数
public class Test{
public static void main(String[] args){
String s1 = "abcbcbcbcbcbc";
String s2 = "bcb";
//最好的算法KMP算法
//贪心算法 5个
int count = 0;
for(int i = 0;i < s1.length()) - s2.length() + 1;i++){
if(s1.charAt(i) == s2.charAt(0)){
if(s2.equals(s1.substring(i,i + s2.length()))){
count++;
}
}
}
System.out.println(count);
//非贪心算法 3个
/*String temp = s1;
int count = 0;
while(true){
int index = temp.indexOf(s2);//得到角标
if(index == -1){
break;
}
count++;
temp = temp.substring(index + s2.length());
}
System.out.println(count);*/
}
}
查找两个字符串中最长的公共子串
public class Test{
public static void main(String[] args){
String s1 = "今天我喜欢你迪丽热巴";
String s2 = "明天我喜欢你哈尼克孜";
for (int len =s2.length();len > 0;len--){
for(int l = 0,r = len - 1;r < s2.length();l++,r++){
String temp = s2.substring(l,r + 1);
if(s1.contains(temp)){
System.out.println(temp);
return;//直接结束程序
}
}
}
}
}
Character
Character它是char基本数据类型的包装类,有几个静态方法目前可以使用到
- static boolean isDigit(char ch):判断字符是否是数字
- static boolean isLetter(char ch):判断字符是否是字母
- static boolean isLetterOrChar(char ch):判断字符是否是字母或数字
- static boolean isLower(char ch):判断字符是否是小写字母
- static boolean isUpper(char ch):判断字符是否是大写字母
- static boolean isLetter(char ch):判断字符是否是字母
- static boolean isSpaceChar(char ch):判断字符是否是空白字母(空格 制表 回车)
将一个十六进制数字转为十进制
import java.util.Scanner;
public class Test{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
System.out.println("请输入一个十六进制的数:");
//0~9 A~F
String hex = input.nextLine().toUpperCase();
if(hex.length() == 0){
System.out.println("没有任何输入");
return;//结束程序
}
for(int i = 0;i < hex.length();i++){
char ch = hex.charAt(i);
if(Character.isDigit(ch) || Character.isLetter(ch)){
if(Character.isLetter(ch) && (ch > 'F' || ch < 'A')){
System.out.println("非法字符" + ch);
return;
}
}else{
System.out.println("非法字符" + ch);
return;
}
}
//09AB 角标0123
//B*16^0 A*16^1 9*16^2 0*16^3
int sum = 0;
for(int i = hex.length() - 1;i >= 0;i--){
char ch = hex.charAt(i);
if(Character.isDigit(ch)){
sum = sum + (int)Math.pow(16,hex.length() - i -1) * (ch -48);//字符'0'是48
}else{
//'A' - 65 + 10 10
sum = sum + (int)Math.pow(16,hex.length() -i -1) * (ch - 55);
}
}
System.out.println(sum);
}
}
求两个字符串的最大公共前缀
import java.util.Scanner;
public class Test{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
System.out.println("输入一个字符串");
String s1 = input.nextLine();
System.out.println("输入另一个字符串");
String s2 = input.nextLine();
/*
123456123
123456
i
*/
if (s1.charAt(0) != s2.charAt(0)){
System.out.println("没有公共前缀");
}
boolean flag = true;
for(int i = 0;i < s2.length();i++){
if(s1.charAt(i) != s2.charAt(i)){
flag = false;
System.out.println(s2.substring(0,i));
break;
}
}
if(flag){
System.out.println(s2);
}
}
}