问题:
在使用scanner的时候如果先读取一个数字,在读取一行带有空格的字符串,势必会出错或者字符串读不到
public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int x = scanner.nextInt();String s = scanner.nextLine();System.out.println("x = " + x);System.out.println("s = " + s);
}
错误原因:标记读取方法 nextInt() 读取数字,然后在分隔符处停止,这里的分隔符是行分隔符(回车键),nextLine() 会在读取行分隔符之后结束,然后返回行分隔符之前的字符串,因为行分隔符之前没有字符,所以line是空的。
解决方法:因为我们前面读取的是一个数字,我们可以先用字符串读取这个数字,在用字符串读取我们所要读取的字符,然后再把第一个读取的字符串转换为数字就可以实现这个功能了。
两种解决方法:
解决方法一:将数字先转化为字符串型,再转化回int型
public static void main(String[] args) {Scanner scanner = new Scanner(System.in);String y = scanner.nextLine();String s = scanner.nextLine();int x = Integer.parseInt(y); //强制转换字符y为int类型的xSystem.out.println("x = " + x);System.out.println("s = " + s);
}
解决方法二:用next()替代nextLine(),但是这里的next无法读取有空格的字符串,但可以读取字符串
public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int x = scanner.nextInt();String s = scanner.next();System.out.println("x = " + x);System.out.println("s = " + s);
}
参考:java学习笔记:Scanner先输入整型再输入字符串时,字符串不能输入的问题
科大讯飞笔试编程第二题:
找两个字符串相似度
- 两个字符串长度相同,相似加1
- 两个字符串含有相同类型的字符组成,相似加1
相似类型的字符只有三类 数字、字母、其他字符
第一行输入t,它代表查询几次
每次查询输入两个字符串比较相似
比如:
通过分析可知0>=相似度<=2
public class Main {public static void main(String args[]) { Scanner sc=new Scanner(System.in);String y=sc.nextLine();int t=Integer.parseInt(y);//不能先输入数字型再输入字符串型(特指nextLine)String[] str=new String[2];while(t>0) {int[] re1=new int[3];int[] re2=new int[3];int count=0;t--; str[0]=sc.nextLine();//输入带空格的字符串str[1]=sc.nextLine();if(str[0].length()==str[1].length()) {//第一个判定条件count++;}char[] ch1=new char[str[0].length()];char[] ch2=new char[str[1].length()];for(int i=0;i<str[0].length();i++) {ch1[i]=str[0].charAt(i);}for(int i=0;i<str[1].length();i++) {ch2[i]=str[1].charAt(i);}for(int i=0;i<ch1.length;i++) {//第二个判定条件,借助共同数组if((ch1[i]>='a'&&ch1[i]<='z')||(ch1[i]>='A'&&ch1[i]<='Z')) {re1[0]=1;}else if(ch1[i]>='0'&&ch1[i]<='9'){re1[1]=1;}else {re1[2]=1;}}for(int i=0;i<ch2.length;i++) {if((ch2[i]>='a'&&ch2[i]<='z')||(ch2[i]>='A'&&ch2[i]<='Z')) {re2[0]=1;}else if(ch2[i]>='0'&&ch2[i]<='9'){re2[1]=1;}else {re2[2]=1;}}int count1=0;for(int i=0;i<3;i++){if(re1[i]==re2[i]) { count1++;} }if(count1==3) {System.out.println(count+1);}else {System.out.println(count);} }}
}