常用类Math、Scanner、Random、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三者的区别和使用

  1. 从是否可变的角度: String类中使用字符数组保存字符串,因为有“final”修饰符,所以String对 象是不可变的 StringBuffer和StringBuilder都继承自AbstractStringBuilder类,在 AbstractStringBuilder中也是使用字符数组保存字符串,但没有“final”修饰符,所以两 种对象都是可变的
  2. 是否多线程安全: String中的对象是不可变的,也就可以理解为常量,所以是线程安全的。 StringBuffer对方法加了同步锁(synchronized) ,所以是线程安全的 StringBuilder并没有对方法进行加同步锁,所以是非线程安全的,效率最 高
  3. 使用 如果你要求字符串不可变,那么应该选择String类 如果你需要字符串可变并且是线程安全的,那么你应该选择StringBuffer 类 如果你要求字符串可变并且不存在线程安全问题,那么你应该选择 StringBuilder类
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m0_59138290

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值