解题思路:
注意事项:
把前n行数据接收完成后,后面还有一行字符串需要用nextLine()接收,但是此时你会发现nextLine()没有运行就执行完毕了。
然后我就在CSDN上找到了这样一篇文章
为什么Scanner中nextLine()方法没有执行就直接跳过了?
其原因是nextLine()方法不能放在nextInt()代码段的后面。
其实,他不是跳过你了,而是他已经有内容了,内容就是\n。
因为nextInt()接收一个整型字符不会读取\n,nextline()读入一行文本,会读入\n字符。
解决方法:
我们用sc.next()接收就不会出现前面的问题,然后再用nextLine()接收剩下的字符串然后将两个字符串拼接起来就行了
String str1 = sc.next(); String str2 = str1 + sc.nextLine();
参考代码:
import java.util.Scanner; public class TT1398 { static Scanner sc = new Scanner(System.in); public static void main(String[] args) { int n = sc.nextInt(); String[] str1 = new String[n]; for (int i = 0; i < n; i++) { str1[i] = sc.next(); } //注本题:接下来有若干段需要处理的文字,处理到文件结束为止,所以我们需要用sc.hasNext() while (sc.hasNext()) { String str2 = sc.next(); //split():根据匹配给定的正则表达式来拆分字符串 //\\s+:正则表达式,配合split方法使用,将一个空格或者多个空格拆分成字符串 String[] str3 = (str2 + sc.nextLine()).split("\\s+"); //剩下的代码大概意思就是用刚拆分出来的数组与前面接收的字符串转化成小写一个一个进行比较 //如果有相同的字符串,那么就用一个新字符串接收,初始化为拆分字符串的第0位,剩下的加上“*”号就行了 //最后把新字符串赋值给当前数组的下标就行了 String str4 = ""; for (int i = 0; i < str3.length; i++) { for (int j = 0; j < str1.length; j++) { if (str3[i].toLowerCase().equals(str1[j].toLowerCase())) { for (int k = 0; k < str3[i].length(); k++) { if (k == 0) { str4 = str3[i].charAt(0) + ""; } else { str4 += "*"; } } str3[i] = str4; } } } for (int i = 0; i < str3.length; i++) { System.out.print(str3[i] + " "); } System.out.println(); //换行加不加都无所谓,仅是为了美观 } } }
0.0分
1 人评分