文章目录
- Math类
- Scanner类
- Random类
- String类
- String方法
- int length();
- char charAt(值);
- char toCharArray();
- int indexOf(“字符”)
- toUpperCase(); toLowerCase();
- String[] split(“字符”)
- boolean equals(Object anObject)
- trim();
- replace(char oldChar,char newChar);
- String substring(int beginIndex,int endIndex)
- boolean equalsIgnoreCase(String)
- boolean contains(String)
- boolean startsWith(String)
- boolean endsWith(String)
- StringBuffer类
- StringBuilder 类
- String、StringBuffer,StringBuilder三者的区别和使用
Math类
Java 的 Math 包含了用于执行基本数学运算的属性和方法,如初等指数、对数、平方根和三角函数。
Math 的方法都被定义为 static 形式,通过 Math 类可以在主函数中直接调用。
求绝对值:
Math.abs(-10); // 10
取最大或最小值:
Math.max(100, 99); // 100
Math.min(1.2, 2.3); // 1.2
计算x的y次方:
Math.pow(2, 10); // 2的10次方=1024
计算√x:
Math.sqrt(2); // 1.414...
计算ex次方:
Math.exp(2); // 7.389...
计算以e为底的对数:
Math.log(4); // 1.386...
计算以10为底的对数:
Math.log10(100); // 2
三角函数:
Math.sin(3.14); // 0.00159...
Math.cos(3.14); // -0.9999...
Math.tan(3.14); // -0.0015...
Math.asin(1.0); // 1.57079...
Math.acos(1.0); // 0.0
Math还提供了几个数学常量:
double pi = Math.PI; // 3.14159...
double e = Math.E; // 2.7182818...
Math.sin(Math.PI / 6); // sin(π/6) = 0.5
生成一个随机数x,x的范围是0 <= x < 1
:
Math.random(); // 0.53907... 每次都不一样
Scanner类
创建 Scanner 对象的基本语法:
Scanner s = new Scanner(System.in);
next() 与 nextLine() 区别
next():
- 1、一定要读取到有效字符后才可以结束输入。
- 2、对输入有效字符之前遇到的空白,next() 方法会自动将其去掉。
- 3、只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。
- next() 不能得到带有空格的字符串。
nextLine():
- 1、以Enter为结束符,也就是说 nextLine()方法返回的是输入回车之前的所有字符。
- 2、可以获得空白。
Random类
Random
用来创建伪随机数。所谓伪随机数,是指只要给定一个初始的种子,产生的随机数序列是完全一样的。
要生成一个随机数,可以使用nextInt()
、nextLong()
、nextFloat()
、nextDouble()
:
Random r = new Random();
r.nextInt(); // 2071575453,每次都不一样
r.nextInt(10); // 5,生成一个[0,10)之间的int
r.nextLong(); // 8811649292570369305,每次都不一样
r.nextFloat(); // 0.54335...生成一个[0,1)之间的float
r.nextDouble(); // 0.3716...生成一个[0,1)之间的double
String类
String方法
int length();
语法:字符串变量名.length();
返回值为 int 类型。得到一个字符串的字符个数(中、英、空格、转义字符皆为字符,计入长度)
char charAt(值);
语法 :字符串名.charAt(值); 返回值为 char 类型。从字符串中取出指定位置的字符
char toCharArray();
语法 :字符串名.toCharArray();返回值为 char 数组类型。将字符串变成一个字符数组
int indexOf(“字符”)
语法 :字符串名.indexOf(“字符”);字符串名.indexOf(“字符”,值);查找一个指定的字符串是否存在,返回的是字符串的位置,如果不存在,则返回-1 。
in lastIndexOf(“字符”) 得到指定内容最后一次出现的下标
toUpperCase(); toLowerCase();
字符串大小写的转换
String[] split(“字符”)
根据给定的正则表达式的匹配来拆分此字符串。形成一个新的String数组。
boolean equals(Object anObject)
语法 :字符串变量名.equals(字符串变量名); 返回值为布尔类型。所以这里用 if 演示。比较两个字符串是否相等,返回布尔值
trim();
去掉字符串左右空格
replace(char oldChar,char newChar);
新字符替换旧字符,也可以达到去空格的效果一种。
String substring(int beginIndex,int endIndex)
截取字符串
boolean equalsIgnoreCase(String)
忽略大小写的比较两个字符串的值是否一模一样,返回一个布尔值
boolean contains(String)
判断一个字符串里面是否包含指定的内容,返回一个布尔值
boolean startsWith(String)
测试此字符串是否以指定的前缀开始。返回一个布尔值
boolean endsWith(String)
测试此字符串是否以指定的后缀结束。返回一个布尔值
StringBuffer类
当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类。
和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修 改, 并且不产生新的未使用对象。
在使用 StringBuffer 类时,每次都会对 StringBuffer 对象本身进行操作,而不是 生成新的对象, 所以如果需要对字符串进行修改推荐使用 StringBuffer。 StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法 不是线程安全的(不能同步访问)。
由于 StringBuilder 相较于 StringBuffer 有速度优势,所以在单线程下多数建议 使用 StringBuilder 类。
StringBuffer 类支持的主要方法:
方法描述 |
---|
public StringBuffer append(String s) 将指定的字符串追加到此字符序列。 |
public StringBuffer reverse() 将此字符序列用其反转形式取代。 |
public delete(int start, int end) 移除此序列的子字符串中的字符。 |
public insert(int offset, int i) 将 int 参数的字符串表示形式插入此序列中。 |
insert(int offset, String str) 将 str 参数的字符串插入此序列中。 |
replace(int start, int end, String str) 使用给定 String 中的字符替换此序列的子字符串中的字符。 |
StringBuffer 类的其他常用方法:
方法描述 |
---|
int capacity() 返回当前容量。 |
char charAt(int index) 返回此序列中指定索引处的 char 值。 |
void ensureCapacity(int minimumCapacity) 确保容量至少等于指定的最小值。 |
void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) 将字符从此序列复制到目标字符数组 dst 。 |
int indexOf(String str) 返回第一次出现的指定子字符串在该字符串中的索引。 |
int indexOf(String str, int fromIndex) 从指定的索引处开始,返回第一次出现的指定子字符串在该字符串中的索引。 |
int lastIndexOf(String str) 返回最右边出现的指定子字符串在此字符串中的索引。 |
int lastIndexOf(String str, int fromIndex) 返回 String 对象中子字符串最后出现的位置。 |
int length() 返回长度(字符数)。 |
void setCharAt(int index, char ch) 将给定索引处的字符设置为 ch 。 |
void setLength(int newLength) 设置字符序列的长度。 |
CharSequence subSequence(int start, int end) 返回一个新的字符序列,该字符序列是此序列的子序列。 |
String substring(int start) 返回一个新的 String ,它包含此字符序列当前所包含的字符子序列。 |
String substring(int start, int end) 返回一个新的 String ,它包含此序列当前所包含的字符子序列。 |
String toString() 返回此序列中数据的字符串表示形式。 |
StringBuilder 类
为了能高效拼接字符串,Java标准库提供了StringBuilder
,它是一个可变对象,可以预分配缓冲区,这样,往StringBuilder
中新增字符时,不会创建新的临时对象
在使用 StringBuffer 类时,每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,所以如果需要对字符串进行修改推荐使用 StringBuffer。
StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。
由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。
StringBuilder类的方法与StringBuffer类似不再赘述。
-
String是不可变类,且是线程安全的;
-
StringBuffer是可变类,且是线程安全的;
-
StringBuilder是可变类,且不是线程安全的。
注:“可变/不可变”指对该类对象进行修改操作时,是否会产生新的对象。 对String对象进行修改时会产生新的对象, 对StringBuffer和StringBuilder对象修改时不会产生新的对象。
(1)基本原则:String用于操作少量的数据;StringBuilder用于单线程操作大量数 据;StringBuffer用于多线程操作大量数据。
(2)不要使用String类的"+"来进行频繁的拼接,它会导致性能变差;应使用 StringBuffer或StringBuilder类进行这些操作。
(3)为了获得更好的性能,在构造 StringBuffer 或 StringBuilder 时应尽可能指定它 们的容量。
String、StringBuffer,StringBuilder三者的区别和使用
- 从是否可变的角度: String类中使用字符数组保存字符串,因为有“final”修饰符,所以String对 象是不可变的 StringBuffer和StringBuilder都继承自AbstractStringBuilder类,在 AbstractStringBuilder中也是使用字符数组保存字符串,但没有“final”修饰符,所以两 种对象都是可变的
- 是否多线程安全: String中的对象是不可变的,也就可以理解为常量,所以是线程安全的。 StringBuffer对方法加了同步锁(synchronized) ,所以是线程安全的 StringBuilder并没有对方法进行加同步锁,所以是非线程安全的,效率最 高
- 使用 如果你要求字符串不可变,那么应该选择String类 如果你需要字符串可变并且是线程安全的,那么你应该选择StringBuffer 类 如果你要求字符串可变并且不存在线程安全问题,那么你应该选择 StringBuilder类