java 基本类
- math类
math类主要是用来数学计算 是一种工具类
工具类基本都是静态的static
自带常量
Math.E :自然对数
Math.PI : 圆周率
取整方法
Math. ceil(xxxxxx):向上取整
Math. floor(xxxxx):向下取整
Math. round (xxxxx):四舍五入
三角函数
Math.sin() :正弦函数 ()中全为弧度制
Math.cos(): 余弦函数
Math.tan():正切函数
Math.toDegerrs ():将弧度转为角度
Math.Radians ():将角度转为弧度
Math. asin(double a):反正弦函
Math.acos(double a):反余弦函数
Math.atan(double a):反正切函数
指数函数
Math.pow(a,b) 求a的b次幂
Math.sqrt(a)求a的平方根
Math.cbrt(a)求a的立方根
其他方法
Math.abs(a)求a的绝对值
Math.hypot(0x,0y)返回两点间距离
Math.max(a,b)返回a b'之间最大值
Math.min(a,b)返回a b之间最小值
Math.random()返回【0,1)之间的随机小数’
2.Scanner类
主要用于负责数据输入的类,底层是和IO流相关。
String next():获取直到遇到空格为止的一个字符串
String nextLine():获取直到遇到回车为止的一个字符串
int nextInt():获取下一个整数 byte short long
double nextDouble()
boolean nextBoolean()
float nextFloat()
3.Random类
主要用于产生随机数
boolean nextBoolean():随机产生布尔类型值
double nextDouble():随机生成0.0~1.0之间的小数
double nextInt():随机生成一个整数0~2 32的整数
double nextInt(n):随机生成一个整数[0,n)的整数
4.String类
String描述的是字符串 字符串一旦被建立 无法修改长度和内容 只能重新建立
public class Sample {
public static 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开始到结尾
String substring(int beginIndex, int endIndex):截取一段子字符串,从beginIndex开始到 endIndex(不包含)
判断相关
int compareTo(String anotherString):按照字典顺序比较两个字符串的大小
boolean contains(String another):判断当前字符串中是否包含指定字符串
another boolean equals(String another):比较当前字符串与指定字符串的内容是否相同
boolean isEmpty():判断当前字符串是否为空,length() == 0
boolean startsWith(String prefix):判断该字符串是否以prefix开头
boolean endsWith(String suix):判断该字符串是否已suix结尾
修改相关
String toLowerCase():将字符串中所有的英文字母全部变为小写
String toUpperCase():将字符串中所有的英文字母全部变为大写
String trim():将字符串中两端的多余空格进行删除
String replace(char oldCh,char newCh):将字符串中oldCh字符替换成newCh字符
相关练习
如何删除字符串中左右两端出现的空格,不用trim
public class Sample {
public static void main(String[] args) {
String str = " 123123123 12123 ";// 对两头进行标志 同时向内进行切割
//去空格后"123123123 12123"
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 Sample {
public static void main(String[] args) {
String s1 = "abcbcbcbcbcbc";
String s2 = "bcb";
//贪心算法 不断取相同字符串
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);
// s2 的首位不断与s1的每一位比较 若相同则切割s1 与s2比较
public class Sample {
public static void main(String[] args) {
String s1 = "abcbcbcbcbcbc";
String s2 = "bcb";
//非贪心算法 找到相同字符串个数即可 无须依次查找 例如题中 就有三个
String temp = s1;
int count = 0;
while (true) {
int index = temp.indexOf(s2);//在s1中查询s2 获取s2第一次出现的角标
if (index == -1) {
break; //若不存在s2 则返回值-1 退出循环
}
count++;
temp = temp.substring(index + s2.length()); // 存在 则记录 并切割s1
}
System.out.println(count);
}
}
查找两个字符串中最长的公共子串
public class Sample {
public static void main(String[] args) {
String s1 = "c is a program but is diffcult";
String s2 = "Java is a program but is slow";
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;//直接结束程序
}
}
}
}
}
由大到小 例如 adcdefg 长度7 角标 0~6
截取一个字符 长度6 角标 0~5 1~6
以此类推 不断截取短的字符串与长字符串做对比 由长至短
Character 类
Character它是char基本数据类型的 包装类
static boolean isDigit(char ch):判断字符是否是数字
static boolean isLetter(char ch):判断字符是否是字母
static boolean isLetterOrDigit(char ch):判断字符是否是数字或字母
static boolean isLowerCase(char ch):判断是否是小写字母
static boolean isUpperCase(char ch):判断是否是大写字母
static boolean isSpaceChar(char ch):判断是否空白字母(空格 制表符 回车)
import java.util.Scanner;
public class Sample {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入一个十六进制的数字:");
//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 < 'A' || ch > 'F')) {
System.out.println("非法字符" + ch);
return;
}
} else {
System.out.println("非法字符" + ch);
return;
}
} 判断合法后进行进制转换
int sum = 0;
for (int i = hex.length() - 1; i >= 0; i--) {
char ch = hex.charAt(i);
if (Character.isDigit(ch)) {
//'1' ? 1
sum = sum + (int)Math.pow(16 , hex.length() - i - 1) * (ch - 48);
} else {
//'A' - 65 + 10 -> 10
sum = sum + (int)Math.pow(16 , hex.length() - i - 1) * (ch - 55);
}
}
System.out.println(sum);
}
}