蓝桥杯做题常用方法(数组、String类)
一、数组
1、获取数组的长度(注意是属性而不是方法)
a.length
2、整型数组的输入
快读快写
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out));
//用完记得关
in.close();
out.close();
快读 + 单个int数据
int n = Integer.ParseInt(in.readLine());
//或者
String[] strs = reader.readLine().split(" ");
int n = Integer.ParseInt(strs[0]);
快读+ 一维 int 数组:a[]
int[] a = new int[n];
String[] strs = reader.readLine().split(" ");
for (int i = 0; i < n; i++)
a[i] = Integer.parseInt(strs[i]);
快读 + 二维 int 数组:a[] []
int[] a = new int[n][];
String[] strs = reader.readLine().split(" ");
for (int i = 0; i < n; i++)
a[i] = Integer.parseInt(strs[i]);
3、char类型数组输入
普通+二维char数组:g[] []
for(int i = 0;i < n;i++){
g[i]=input.next().toCharArray();
}
快读+一维char数组:g[]
char[] g=in.readLine().toCharArray();
快读+二维char数组:g[] []
for(int i = 0;i < n;i++){
char[] str = in.readLine().toCharArray();
for(int j = 0;j < m;j++){
g[i][j]= str[j];
}
}
//或者
for(int i = 0;i < n;i++){
g[i]=in.readLine().toCharArray();
}
4、数组的排序sort
利用Arrays类
Arrays.sort(a);//对整个数组进行排序(从小到大)
Arrays.sort(a,0,n);//对数组指定范围进行排序(0~n-1)
5、数组的填充(初始化赋值)
//一维数组a[]
Arrays.fill(a,-1);//对整个数组赋值-1
//二维数组a[][] 这里要注意区分
for(int i = 0;i < n;i++)
Arrays.fill(a[i],-1);
6、数组拷贝(深拷贝)
拷贝所有元素
使用Object类的clone方法
int[] a = {1,2,3}
int[] b = a.clone();
拷贝指定位置元素
使用Arrays.copyOf方法
//copyOf(oringinal, int newlength)
//oringinal:原数组 newlength:复制数组的长度
//这个方法是从原数组的起始位置开始复制,复制的长度是newlength。这个方法只能从原数组的起始位置开始复制。
int[] a = {1,2,3};
int[] b = Arrays.copyOf(a,3);
7、数组与List互相转换
数组转List
包装类型数组(注意下面方法只能应用于包装类型数组)
Integer[] arr = new Integer[] { 1, 2, 3 };
List<Integer> list = Arrays.asList(arr);
for(Integer i:list)
System.out.println(i);
List转数组
使用toArray()方法,用一个预定义的数组作为出参接收转化后的数组
List<Integer> stockList = new ArrayList<>();
stockList.add(1);
stockList.add(2);
Integer[] stockArr = new Integer[stockList.size()];
stockArr = stockList.toArray(stockArr);
for(Integer s : stockArr)
System.out.println(s+" ");
二、String类
1、输入字符串
快读快写
Bufferedreader bf=new BufferedReader(new InputStreamReader(System.in));
String s[]=bf.readLine().split(" ")
split(" ")表示去掉输入的串中的空格
split("\")表示去掉输入的串中的\
根据题目要求,想去什么符号就在split("")引号中加什么。
int a=Integer.parseInt(s[0]);
将输入的字符串变为整数
常用输入转换:
int a[]=new int[n];
a的下标从1开始
for(int i=1;i<=n;i++){
a[i]=Integer.parseInt(s[i-1]);
}
如何读入确定行数下不确定列数的字符串/数字串?
先读入n行字符串数组
for(int i=0;i<n;i++){
String s[]=in.readLine().split(" ");
再读入每一列的不确定个数的内容
for(int j=0;j<s.length();j++){
int num=Integer.parseInt(s[j]);
}
完整代码
for(int i=0;i<n;i++){
String s[]=bf.readLine().split(" ");
for(int j=0;j<s.length();j++){
int num=Integer.parseInt(s[j]);
}
}
Scanner读入
Scanner sc=new Scanner(System.in);
String s=sc.next();
String s=sc.nextLine();
**sc.next()**从遇到第一个有效字符(非空格、换行符)开始扫描,遇到第一个分隔符或结束符(空格’ ‘或者换行符’\n’)时结束。
**sc.nextLine()**则是扫描剩下的所有字符串直到遇到回车为止。
根据题目所需读入:
需要空格后面的输入内容用sc.nextLine()
不需要空格后面的输入内容用sc.next()
一般情况下推荐sc.nextLine()
有一般就会有特殊,具体视题目而定:
读入时出现空格情况,但是只要第一个串,空格后面的不能读入,如下图所示:
这时用sc.nextLine()就会将后面的数字都读进去造成读入错误
这时就需要用sc.next()遇到空格直接停下来,后面的数字都不读入。
读入输入的字符串中的某个字符
String s=sc.next();
char op=s.charAt(0);
op=='a';
字符串的比较用equals
字符的比较用 ==
2、创建字符串
String s=new String("abc");
3、 length()
作用:获取字符串的长度
int len=s.length();
4、equals()
作用:比较两字符串是否相等(引用类型比较用)
String s1=sc.next();
String s2=sc.next();
s1.equals(s2)
5、charAt()
作用:根据字符串下标获取字符
char a=s.charAt(0);
获取字符串下标为0的字符
补充:
char []a=s.toCharArray();
char b=a[0];
转为数字:int b=a[0]-'0';
6、indexOf()
作用:返回找到的字符串/字符的起始下标,找不到则返回-1。
String s="abcd";
int a=s.indexOf("a");
7、contains()
作用:字符串中包含字符串/字符则返回true,不包含则返回false。
String s=sc.next();
boolean a=s.contains("想寻找的串/字符");
8、split()
作用:去掉字符串内的某个字符
常用于输入分割空格
String s[]=bf.readLine().split(" ");
9、trim()
作用:去掉字符串两边的空格
String s[]=bf.readLine().trim(" ");
10、substring()
substring(int beginIndex, int endIndex);//返回从begin开始到end-1结束的子串
String s = "123456";
String s1 = s.substring(0,3);
System.out.println(s1); //123
11、toUppercase()
将字符串里的字符都转大写
String s1=s2.touppercase();
12、toLowercase()
将字符串里的字符都转小写
String s1=s2.tolowercase();
13、字符串拼接
(1) 直接加: +=
String s1=sc.next();
String s2=sc.next();
s1+=s2
(2)StringBuffer类
StringBuffer s=new StringBuffer();
s.append(" ")
可以一直追加
s.append(" ").append(" ").append(" ")
14、字符串转为字符数组
char a[]=sc.next().toCharArray();
15、字符转数字
字符串为数字串
int a=s.charAt(i)-'0';
相当于用s.charAt(i)得到的字符的ASCII码减去'0'的ASCII码
字符串为字母串
int a=s.charAt(i)-'A';
int a=s.charAt(i)-'a';
相当于用s.charAt(i)得到的字符的ASCII码减去'A(a)'的ASCII码
16、数字转字符
(char)(i + 'A')
17、String和其他基本数据类型的转换
1.可以使用toString将其他数据类型转换为String类,但这种方法只对包装类起作用(如:Integer)
2.使用String自带的valueOf()方法,支持将基本的数据类型转换
3.注意:int转String用String.valueOf(),别用 +"",差了好几倍时间。
4.而将String转换为其他,可以用自带类的.parseXXX(string)方法
Integer a=new Integer(100);
String s1=a.toString();//类自带的toString()方法
int i=99;
String s2=String.valueOf(i);//String自带的valueOf()方法
Integer b=Integer.parseInt(s2);//每个类都有.parseXXX(String s)方法
18、字符串翻转
String str = "123456";
String newStr = new StringBuilder(str).reverse().toString();
System.out.println(newStr);
19、格式化输出
System.out.println(String.format("%.6f",l)); //保留小数点后6位
String.format("%02d", h); //不足两位则补0