JAVA蓝桥杯常用方法

1. 输入输出

( 1 ) 循环输入结构:

1
2
3
4
5
6
Scanner sc = new Scanner(System.in);

while (sc.hasNext()) {
// 输入
int n = sc.nextInt();
}

2. 数组操作

(1)给空数组填满数据

Modifier and Type Method and Description
static void fill(boolean[] a, boolean val)
将指定的布尔值分配给指定的布尔数组的每个元素。
static void fill(boolean[] a, int fromIndex, int toIndex, boolean val)
将指定的布尔值分配给指定数组布尔值的指定范围的每个元素。
static void fill(byte[] a, byte val)
将指定的字节值分配给指定字节数组的每个元素。
static void fill(byte[] a, int fromIndex, int toIndex, byte val)
将指定的字节值分配给指定字节数组的指定范围的每个元素。
static void fill(char[] a, char val)
将指定的char值分配给指定的char数组的每个元素。
static void fill(char[] a, int fromIndex, int toIndex, char val)
将指定的char值分配给指定的char数组的指定范围的每个元素。
static void fill(double[] a, double val)
将指定的double值分配给指定的双精度数组的每个元素。
static void fill(double[] a, int fromIndex, int toIndex, double val)
将指定的double值分配给指定的双精度数组范围的每个元素。
static void fill(float[] a, float val)
将指定的float值分配给指定的浮点数组的每个元素。
static void fill(float[] a, int fromIndex, int toIndex, float val)
将指定的浮点值分配给指定的浮点数组的指定范围的每个元素。
static void fill(int[] a, int val)
将指定的int值分配给指定的int数组的每个元素。
static void fill(int[] a, int fromIndex, int toIndex, int val)
将指定的int值分配给指定的int数组的指定范围的每个元素。
static void fill(long[] a, int fromIndex, int toIndex, long val)
将指定的long值分配给指定的longs数组的指定范围的每个元素。
static void fill(long[] a, long val)
将指定的long值分配给指定的longs数组的每个元素。
static void fill(Object[] a, int fromIndex, int toIndex, Object val)
将指定的对象引用分配给指定的对象数组的指定范围的每个元素。
static void fill(Object[] a, Object val)
将指定的对象引用分配给指定的对象数组的每个元素。
static void fill(short[] a, int fromIndex, int toIndex, short val)
将指定的短值分配给指定的短裤数组的指定范围的每个元素。
static void fill(short[] a, short val)
将指定的短值分配给指定的短裤数组的每个元素。

根据官方 API 可以看出基本上任何类型都可以使用Arrays.fill()来填充。

举例:

1
2
3
4
5
6
7
8
9
10
11
12
import java.util.Arrays; //导入java.util.Arrays类

public class Swap {
public static void main(String[] args) {
int arr[] = new int[5]; // 创建int型数组
Arrays.fill(arr, 8); // 使用同一个值对数组进行填充
for (int i = 0; i < arr.length; i++) { // 循环遍历数组中的元素
// 将数组中的元素依次输出
System.out.println("第" + i + "个元素是:" + arr[i]);
}
}
}

3. 常用类及其方法

(1)String 类常用方法

获取字符串长度

返回字符数量即字符串的长度。

1
str.length();

获取指定位置的字符

获取指定索引的字符。

1
str.charAt(index);

获取子字符串索引位置

返回搜索的字符或字符串在字符串中首次出现的索引位置。没有检索到则返回 -1。

1
a.indexOf(substr);

判断字符串首尾内容

判断字符串是否以指定的前缀开始;

1
str.startsWith(prefix);

判断字符串是否以指定的后缀结束;

1
str.endsWith(suffix);

获取字符数组

将字符串转换为字符数组。

1
str.toCharArray();

判断子字符串是否存在

判断字符串中是否包含指定的内容。

1
str.contains(string);

(2)字符串操作

截取字符串

返回一个新字符串,它是此字符串的一个子串,beginIndex包括,endIndex不包括。

1
2
str.substring(beginIndex);
str.substring(beginIndex, endIndex);

字符串替换

将指定的字符序列替换为新的字符序列。若str中没有找到需要被替换的子字符串oldstr则返回原字符串。

  • 如果oldstr重复出现多次,则会替换所有的oldstr
1
str.replace(oldstr, newstr);

字符串分割

根据给定字符串进行拆分,支持正则表达式。最后返回一个字符串数组。

1
str.split(regex);

正则表达式

正则表达式通常被用于判断语句中,来检查某一字符串是否满足某一格式。正则表达式是含有一些具有特殊意义字符的字符串,这些特殊字符称为正则表达式的元字符。例如,“\d” 表示字母 0~9 中任何一个,“\d” 就是元字符。正则表达式中元字符及其意义,如表1所示。

正则表达式中的元字符

元字符 正则表达式中写法 意义
. “.” 代表任意一个字符
“\d” 代表 0~9 的任何一个数字
“\D” 代表任何一个非数字字符
“\s” 代表空白字符。如 ‘、‘’
“\S” 代表非空白字符
“\w” 代表可用做标识符的字符,但不包括 “\(” 符 | | \W | “\\W” | 代表不可用于标识符的字符 | | \p{Lower} | \\p{Lower} | 代表小写字母 {a-z} | | \p{Upper} | \\p{Upper} | 代表大写字母 {A-Z} | | \p{ASCII} | \\p{ASCII} | ASCII 字符 | | \p{Alpha} | \\p{Alpha} | 字母字符 | | \p{Digit} | \\p{Digit} | 十进制数字。即 [0~9] | | \p{Alnum} | \\p{Alnum} | 数字或字母字符 | | \p{Punct} | \\p{Punct} | 标点符号:!"#\)%&'()*+,-./:;<=>?@[]^_`{|}~
\p{Graph} 可见字符:[]
\p{Print} 可打印字符:[]
\p{Blank} 空格或制表符:[
\p{Cntrl} 控制字符:[-1F7F]

在项目中创建类 Judge,在主方法中实现使用正则表达式来判断指定的变量是否是合法的 E-mail 地址。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
01 public class Judge { // 新建类

02 public static void main(String[] args) { // 主方法

03 String regex = "\\w{0,}\\@\\w{0,}\\.{1}\\w{0,}"; // 正则表达式,定义邮箱格式

04 String str1 = "aaa@"; // 定义字符串str1

05 String str2 = "aaaa"; // 定义字符串str2

06 String str3 = "aaaaa@111.com"; // 定义字符串str3

07 if (str1.matches(regex)) { // matches()方法可判断字符串是否与正则表达式匹配

08 System.out.println(str1 + " 是一个E_mail地址格式"); // 输出信息

09 }

10 if (str2.matches(regex)) { // 判断字符串str2是否与正则表达式匹配

11 System.out.println(str2 + " 是一个E_mail地址格式"); // 输出信息

12 }

13 if (str3.matches(regex)) { // 判断字符串str3是否与正则表达式匹配

14 System.out.println(str3 + " 是一个E_mail地址格式"); // 输出信息

15 } else { // 如果str1、str2、str3与正则表达式都不匹配

16 System.out.println("都不是E_mail地址格式"); // 输出信息

17 }

18 }

19 }

大小写转换

将字符串中所有字符串换成小写。若没有应该转换的字符串,则将原字符串返回。

1
str.toLowerCase();

将字符串中所有字符串换成大写。若没有应该转换的字符串,则将原字符串返回。

1
str.toUpperCase();

去除空白内容

将字符串首尾处的空白内容都删除。

1
str.trim();

比较字符串是否相等

比较两个字符串的内容是否相同,需要使用equals()方法。当且仅当进行比较的字符串不为null,并且与被比较的字符串内容相同时,结果才为true

1
a.equals(str);

==比较的是两个字符串引用的是否为同一对象!若为同一对象,则返回true,否则返回false

比较字符串“大小”

compareTo() 方法用于按字典顺序比较两个字符串的大小,该比较是基于字符串各个字符的 Unicode 值。

1
str.compareTo(String otherstr);

它会按字典顺序将 str 表示的字符序列与 otherstr 参数表示的字符序列进行比较。如果按字典顺序 str 位于 otherster 参数之前,比较结果为一个负整数;如果 str 位于 otherstr 之后,比较结果为一个正整数;如果两个字符串相等,则结果为 0。

4. 可变字符串 StringBuffer 类

StringBuffer类是线程安全的可变字符序列,一个类似于String类的字符串缓冲区,两者本质上是一样的,但是StringBuffer类的执行效率比String类快很多。StringBuffer类创建的字符串序列是可修改的,且实体容量会随着存放的字符增加而增加。

Ⅰ. 创建 StringBuffer 类

创建StringBuffer类必须使用关键字new,不可以像String直接引用字符串常量。

1
2
3
StringBuffer sbf = new StringBuffer();			// 创建一个对象,无无初始值
StringBuffer sbf = new StringBuffer("abc"); // 创建一个对象,初始值为"abc"
StringBuffer sbf = new StringBuffer(32); // 创建一个对象,初始容量为32个字符

Ⅱ. append() 方法

append()方法可以将参数转换成字符串,然后追加到子序列中。obj为任意数据类型的对象如StringintdoubleBoolean等。

1
sbf.append(obj);

Ⅲ. setCharAt(int index, char ch) 方法

将给定索引处的字符修改为 ch。

1
sbf.setCharAt(index, ch);

其中index为被替换字符的索引。

Ⅳ. insert(int offset, String str) 方法

将字符串str插入到指定的索引值offset位置上。

1
sbf.insert(offset, str);

offset为插入的索引。str为插入的字符串。

Ⅴ. delete(start, end) 方法

移除此序列的子字符串的字符。子字符串是从指定的索引start处开始,一直到索引end - 1处。如果end - 1超过最大索引范围,则一直到序列尾部。如果start等于end,则不发生更改。

1
sbf.delete(start, end);

start起始索引(包含)。

end结束索引(不包含)。

Ⅵ. StringBuffer 类中方法的使用

StringBuffer类中类似String类方法:

1
2
3
4
5
sbf.length();
sbf.charAt();
sbf.indexOf();
sbf.substring();
sbf.replace();

5. Integer 类(Byte,Short,Long 类似)

构造方法:

Constructor and Description
Integer(int value)
构造一个新分配的 Integer对象,该对象表示指定的 int值。
Integer(String s)
构造一个新分配 Integer对象,表示 int由指示值 String参数。

常用方法:

Modifier and Type Method and Description
static int compare(int x, int y)
比较两个 int数字值。
int compareTo(Integer anotherInteger)
数字比较两个 Integer对象。值相等返回 0,如果小于anotherInteger返回负值,否则返回正值。
boolean equals(Object obj)
将此对象与指定的对象进行比较。
static int parseInt(String s)
将字符串参数解析为带符号的十进制整数。
static int parseInt(String s, int radix)
将字符串参数解析为第二个参数指定的基数中的有符号整数。
byte byteValue()
返回此值 Integerbyte的基本收缩转换后。
short shortValue()
返回此值 Integershort的基本收缩转换后。
float floatValue()返回此值 Integerfloat一个宽元转换后。
int intValue()Integer的值作为 int
long longValue()返回此值 Integerlong一个宽元转换后。
static String toBinaryString(int i)
以二进制无符号整数形式返回一个证书参数的字符串表示形式。
static String toHexString(int i)
以十进制无符号整数形式返回一个证书参数的字符串表示形式。
static String toOctalString(int i)
以八进制无符号整数形式返回一个证书参数的字符串表示形式。
String toString()
返回 String表示此对象 Integer的价值。
static Integer valueOf(int i)
返回一个 Integer指定的 int值的 Integer实例。
static Integer valueOf(String s)
返回一个 Integer对象,保存指定的值为 String
static Integer valueOf(String s, int radix)
返回一个 Integer对象,保存从指定的String中 String的值,当用第二个参数给出的基数进行解析时。

常量

Integer类提供了 4 个常量:

  • MAX_VALUE:表示int类型可取的最大值,\(2^{31}-1\)
  • MIN_SIZE:表示int类型可取的最小值,-\(2^{31}\)
  • SIZE:用二进制补码的形式表示int值的位数。
  • TYPE:表示基本类型intClass实例。

6. Math 类

Math 中的数学方法都被定义成 static 形式,所以在程序中可以直接通过 Math 类的类名调用某个函数,语法如下:

1
Math.数学方法

Math 类中还定义了一些数学常量:

1
2
Math.PI		// 圆周率的值
Math.E // 自然对数e

常用的数学方法:

1. 指数函数方法:

方法 返回值 功能描述
exp(double a) double 获取 e 的 a 次方,\(e^a\)
double log(double a) double 取自然对数,取 lna 的值
double log10(double a) double 取底数为 10 的对数
sqrt(double a) double 取 a 的平方根,a 的值不能为负值
cbrt(double a) double 取 a 的立方根
pow(double a, double b) double 取 a 的 b 次方

2. 取整函数方法:

方法 返回值 功能描述
ceil(double a) double 返回大于或等于参数的最小整数
floor(double a) double 返回小于或等于参数的最大整数
rint(double a) double 返回与参数最接近的整数,如果两个同为整数且接近,结果为偶数
round(int a) int 将参数加上 0.5 后返回小于或等于参数的最大 int 值
round(long a) long 将参数加上 0.5 后返回小于或等于参数的最大 long 值

3. 取最大值、最小值、绝对值函数方法

方法 返回值 功能描述
max(double a, double b) double 取 a,b 之间的最大值
min(double a, double b) double 取 a,b 之间的最小值,参数为双精度型
min(long a, long b) long 取 a,b 之间的最小值,参数为长整型
min(float a, float b) float 取 a,b 之间的最小值,参数为浮点型
abs(int a) int 返回整型参数的绝对值
abs(long a) long 返回长整型参数的绝对值
abs(float a) float 返回浮点型参数的绝对值
abs(double a) double 返回双精度型参数的绝对值

7. Random 类

在使用随机数之前需要实例化一个 Random 类对象:

1
Random r = new Random();
方法 返回值 功能描述
nextInt() int 返回一个随机 int 型值
nextInt(int n) int 返回大于或等于 0、小于 n 的随机 int 型值
nextLong() long 返回一个随机 long 型值
nextBoolean() boolean 返回一个随机 boolean 型值
nextFloat() float 返回一个随机 float 型值
nextDouble() double 返回一个随机 double 型值
nextGaussian() double 返回一个概率密度为高斯分布的 double 型值

8. Date 类

Java 的 java.util 包中提供了 Date 类来操作日期和时间。使用 Date 类时,需要先创建 Date 类的对象。

Date 类的构造方法及说明

构造方法 功能描述
Date() 分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒)
Date(long data) 分配 Date 对象并初始化此对象,以表示自从标准基准时间(即 1970 年 1 月 1 日 00:00:00 GMT)以来的指定毫秒数

Date 类的常用说法及说明

方法 返回值 功能描述
after(Date when) boolean 测试当前日期是否在指定的日期之后
before(Date when) boolean 测试当前日期是否在指定的日期之前
getTime() long 1970 年 1 月 1 日 00:00:00 GMT 开始到现在所表示的毫秒数
setTime(long time) void 设置当前 Date 对象所表示的日期时间值,该值以表示 1970 年 1 月 1 日 00:00:00 GMT 以后 time 毫秒的时间点

按照指定格式对日期进行格式化 DateFormat 类

DateFormat 类是抽象类,创建对象方法如下:

1
DateFormat df = DateFormat.getDateInstance();

DataFormet 类的常用方法及说明

方法 返回值 功能描述
format(Date date) String 将一个 Date 格式化为日期/时间字符串
getCalenar() Calendar 获取于此日期/时间格式器关联的日历
getDateInstance() static DateFormet 获取日期格式器,改格式器具有默认语言环境的默认格式化风格
getDateTimeInstance() static DateFormet 获取日期/时间格式器,改格式器具有默认语言环境的默认格式化风格
getInstance() static DateFormet 获取 SHORT 风格的默认日期/时间格式器
getTimeInstance() static DateFormet 获取时间格式器,改革是具有默认语言环境的默认格式化风格
parse(String source) Date 将字符串解析成一个日期,并返回这个日期的 Date 对象

9. 集合类

Collection 接口

Collection 接口的常用方法及说明

方法 功能描述
add(Object e) 将指定的对象添加到当前集合中
remove(Object o) 将指定的对象从集合中移除
isEmpty() 返回 boolean 值,用于判断集合是否为空
iterator() 返回用于遍历集合元素的迭代器
size() 返回 int 型值,获取当前集合中元素的个数

List 集合

List 接口的两个重要方法

方法 功能描述
get(int index) 获得指定索引位置上的元素
set(int index, Object obj) 将集合中指定索引位置的对象修改为指定的对象

List 接口不能直接被实例化,所以 Java 提供了 List 接口的实现类,其中最常用的实现类是 ArrayList 与 LinkedList 类。

  • ArrayList 以数组的形式保存集合中的元素,能够根据索引位置随机目快速地访问集合中的元素。

  • LinkedList 以链表结构(是一种数据结构)保存集合中的元素,随机访问集合中元素的性能较差,但向集合中插入元素和删除集合中元素的性能出色。 分别使用 ArrayList 类和 LinkedList 类实例化 List 集合的关键代码如下:

    1
    2
    List<E> list = new Arraylist<>();
    List<E> list2 = new Linkedlist<>();

    其中,E 代表元素类型。

Iterator 迭代器

Iterator 接口是专门对集合进行迭代的迭代器。

Iterator 迭代器的常用方法

方法 功能描述
hasNext() 如果仍有元素可以迭代,则返回 true
next 返回迭代的下一个元素(返回值类型为 Object,因此需要强制类型转换)
remove() 从迭代器指向的 Collection 中移除迭代器返回的最后一个元素(可选操作)

Set 集合

由于 Set 集合中的元素不能重复,因此在向 Set 集合中添加元素时,需要先判断新增元素是否已经存在于集合中,再确定是否执行添加操作。

Set 接口常用的实现类有 HashSet 类与 TreeSet 类,分别如下:

  • HashSet 是 Set 接口的一个实现类,它不允许有重复元素。
  • TreeSet 类不仅实现了 Set 接口,还实现了 java.util.SortedSet 接口,因此在遍历使用 TreeSet 类实现的 Set 集合中的元素时,会默认地将元素按升序排列。在创建 TreeSet 类对象时,通过使用 Comparator 接口,还可以实现定制排序,例如降序排列。

说明:Comparator 接口,即“比较器”,它提供一个抽象方法compare(T ol,T o2),这个方法指定了两个对象的比较规则,如果 o1 大于 o2,方法返回正数(通常为+1);如果 o1 等于 o2,方法返回 0;如果 01 小于 o2,方法返回负数(通常为-1)。

如果想制定 TreeSet 的排序规则,可以在实例化 TreeSet 对象时,将一个已经写好的比较器作为构造参数传入,或者让 TreeSet 中的所有元素都实现 Comparable 接口。 TreeSet 类除了可以使用 Collecion 接口中的方法以外,还提供了一些其他操作集合中元素的方法:

方法 功能描述
first() 返回此 Set 中当前第一个(最低)元素
last() 返回此 Set 中当前最后一个(最高)元素
comparator() 返回对此 Set 中的元素进行排序的比较器。如果此 Set 使用自然顺序,则返回 null
headSet(E toElement) 返回一个新的 Set 集合,新集合是 toElement(不包含)之前的所有对象
subSet(E fromElement, E fromElement) 返回一个新的 Set 集合,是 fromElement(包含)对象与 fromElement(不包含)对象之间的所有对象
tailSet(E fromElement) 返回一个新的 Set 集合,辛几何包含对象 fromElement(包含)之后的所有对象

HashSet 类和 TreeSet 类都是 Set 接口的实现类,他们都不允许有重复元素,但 HashSet 类在遍历集合中的元素是不关心元素的顺序,而 TreeSet 类则会按自然顺序(升序排列)遍历集合中的元素。

Map 集合

在存储具有映射关系的数据是,需要用到 Map 集合。

Map 接口虽然没有继承 Collection 接口,但提供了 key 到 value 的映射关系。Map 接口中不能包含相同的 key,并且每个 key 只能映射一个 value。

方法 功能描述
put(Object key, Object value) 向集合中添加指定的 key 与 value 的映射关系
cintainsKey(Object key) 如果此映射包含指定 key 的映射关系,则返回 true
contains Value(Object value) 如果此映射将一个或多个 key 映射到指定值,则返回 true
get(Object key) 如果存在指定的 key 对象,则返回该对象对应的值,否则返回 null
keySet() 返回该集合中的所有 key 对象形成的 Set 集合
values() 返回该集合中所有值对象形成的 Collection 集合

Map 接口常用的实现类有 HashMap 和 TreeMap 两种,分别如下:

  • HashMap 类是 Map 接口的实现类。HashMap 类虽然能够通过哈希表快速查找其内部的映射关系,但不保证映射的顺序。在 key-value 对(键值对)中,由于 key 不能重变,所以最多只有一个 key 为 null,但可以有无数多个 value 为 null。
  • TreeMap 类不仅实现了 Map 接口,还实现了 java.uil.SortedMap 接口。由于使用 TreeMap 类实现的 Map 集合存储 key-value 对时,需要根据 key 进行排序,所以 key 不能为 null。

建议使用 HashMap 类实现 Map 集合,因为由 HashMap 类实现的 Map 集合添加和删除映射关系的效率更高;而如果希望 Map 集合中的元素存在一定的顺序,应该使用 TreeMap 类实现 Map 集合。


JAVA蓝桥杯常用方法
https://excelius.xyz/java蓝桥杯常用方法/
作者
Excelius
发布于
2021年11月11日
许可协议