算法竞赛字符串常用操作总结来啦~ 👊
大家好 我是寸铁💪
考前需要刷大量真题,大家一起相互监督,每日做N题,一起上岸吧✌️ ~
冲刺蓝桥杯省一模板大全来啦 💥 ~
蓝桥杯4月8号就要开始了 🙏 ~
还没背熟模板的伙伴们背起来 💪 💪 💪
祝大家4月8号蓝桥杯上岸 ☀️ ~
不清楚蓝桥杯考什么的点点下方👇
考点秘籍
想背纯享模版的伙伴们点点下方👇
蓝桥杯省一你一定不能错过的模板大全(第一期)
蓝桥杯省一你一定不能错过的模板大全(第二期)
想背注释模版的伙伴们点点下方👇
蓝桥杯必背第一期
蓝桥杯必背第二期
往期精彩回顾
蓝桥杯上岸每日N题 第一期(一)!!!
蓝桥杯上岸每日N题第一期(二)!!!
蓝桥杯上岸每日N题第一期(三)!!!
蓝桥杯上岸每日N题第二期(一)!!!
蓝桥杯上岸每日N题第三期(一)!!!
操作系统期末题库 第九期(完结)
LeetCode Hot100 刷题(第三期)
idea创建SpringBoot项目报错解决方案
数据库SQL语句(期末冲刺)
想看JavaB组填空题的伙伴们点点下方 👇
填空题
算法竞赛字符串常用操作总结
看了网上的博客大部分总结的不是很全或者比较实用,于是自己总结了一些常用的方法,也不单是算法竞赛,其他比较常见的操作也概括进来了,如有错漏,欢迎补充 🌹 🌹🌹
一、输入字符串
快读快写
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[]=bf.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()遇到空格直接停下来,后面的数字都不读入。
 
那像这种读入呢?

输入原题
有同学一看这中间无空格应该用**sc.nextLine()**读入
 我们来试一下~!
 
这样就会报错,出现某个字符匹配不上问题。
为什么???
注意:这里用**sc.nextLine()读取时会将空格一并读入**,但是我们不需要后面多余的空格,只需要前面的字母即可。
那怎么才不会读错呢?
很简单,用**sc.next()**,**遇到空格便停下来,不会读入多余的空格!
 
读入二维字符数组
一些BFS/DFS题目需要读入二维字符数组
 java中,是没有直接读入字符这么一种操作。
 因此,我们需要先读入字符串再转换成字符数组!!!
读入题:全球变暖
(1)先创建字符数组
char g[][]=new char[N][N];
(2)for循环读入
for(int i=0;i<n;i++){
    char a[]=sc.next().tocharArray();//把每一行字符串转换成字符数组
    for(int j=0;j<n;j++){
        g[i][j]=a[j];//再将每一列进行分配
    }
}
 
完整代码:
char g[][]=new char[N][N];
for(int i=0;i<n;i++){
    char a[]=sc.next().tocharArray();//把每一行字符串转换成字符数组
    for(int j=0;j<n;j++){
        g[i][j]=a[j];//再将每一列进行分配
    }
}
 
读入输入的字符串中的某个字符
String s=sc.next();
char op=s.charAt(0);
op=='a';
 
字符串的比较用**equals**
 字符的比较用  ==
二、创建字符串
(一) String s=new String()
 String s=new String("abc");
(二)String.valueOf()
 String.valueOf(int i): 
 作用:返回 int 参数的字符串表示形式。
 调用**String.valueOf()方法可以得到int**形式下的表示形式。
 例如:
int n=1234454;
String s=String.valueOf(n)
输出s的内容:1234454
 
可以替换其他参数形式详见 👇
 String.valueOf()
三、 length()
 
作用:获取字符串的长度
 int len=s.length();
四、equals()
 
作用:比较两字符串是否相等
String s1=sc.next();
String s2=sc.next();
s1.equals(s2)
 
五、s.charAt()
 
作用:根据字符串下标获取字符
 char a=s.charAt(0);
 获取字符串下标为0的字符
 补充:
char []a=s.toCharArray();
char b=a[0];
转为数字:int b=a[0]-'0';
 
六、indexOf()
 
作用:返回找到的字符串/字符的起始下标,找不到则返回-1。
String s="abcd";
int a=s.indexOf("a");
 
七、contains()
 
作用:字符串中包含字符串/字符则返回true,不包含则返回false。
String s=sc.next();
boolean a=s.contains("想寻找的串/字符");
 
八、split()
 
作用:去掉字符串内的某个字符
 常用于输入分割空格
 String s[]=bf.readLine().split(" ");
九、trim()
 
作用:去掉字符串两边的空格
 String s[]=bf.readLine().trim(" ");
十、substring()
作用:截取字符
 String s1=s2.substring(start,end);
 String s1=s2.substring(1,3);
包含起始下标,不包含结束下标。
String s1=s.substring(start);
 String s1=s.substring(2);
截取以2为起始下标到字符串末尾的字符串
 
String s2=s.substring(s.length()-n);
 截取从**s.length()-n到字符串末尾**的字符串
 相当于保留后n位字符
 
String s=sc.next();
 String s2=s.substring(s.length()-2);
 截取从**s.length()-2到字符串末尾**的字符串
相当于保留后两位字符
十一、touppercase()
 
将字符串里的字符都转大写
 String s1=s2.touppercase();
十二、tolowercase()
 
将字符串里的字符都转小写
 String s1=s2.tolowercase();
十三、字符串拼接
(1) 直接加: +=
String s1=sc.next();
String s2=sc.next();
s1+=s2
 
(2)StringBuffer类
 StringBuffer s=new StringBuffer();
 s.append(" ")
 可以一直追加
 s.append(" ").append(" ").append(" ")
十四、字符串转为字符数组
(一)写法1
char a[]=sc.next().toCharArray();
(二)写法2
String S=sc.next();
char a[]=S.toCharArray();
 
其他情况
如果我们是想从数组**a[]** 下标1个开始读入字符该怎么做?
 很简单,在读入串之前加上一个占位符占掉**a[]的a[0]位置即可。
 这样就可以从数组下标1**开始读入字符
注意:
" "+sc.next()这一整个整体要用括号括起来,不然会报类型转换错误。
 正确代码如下:
 (1)写法1
 char a[]=(" "+sc.next()).toCharArray();
 (2)写法2
char a[]=new char[N];
a=(" "+sc.next()).toCharArray();
 
十五、字符转数字
(一)字符串为数字串
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码
 视题目而定
十六、数字转字符
(char)(i + 'A')



















