java - 在扫描仪中返回包含字符 c 的字符串
问题描述
尝试创建一个findNewLineWithChar()
返回 String 并接受 Scannerscn
和 char的方法c
。它返回包含c
.
我尝试使用字符串来存储 currentLine 的值,但它似乎使我的代码复杂化并且无论如何都没有提供任何答案。我很想使用 String[],但我得到了 NullPointerException。我到底在做什么错?
public static String findLineWithChar(Scanner scn, char c) {
/*
* findLineWithChar returns line in scanner if line has char c
* @param scanner
* @param c
*/
String result = "";
String[] stringArray = new String[10]; //accepts max 10 lines
int counter = 0; //populate string array from scn
while(scn.hasNextLine()) {
stringArray[counter] = scn.nextLine();
counter++;
}
//iterate through each element in string array
for (int i = 0; i < 10; i++) {
if (stringArray[i].contains(c + "")) {
result = stringArray[i];
System.out.println(stringArray[i]);
break;
} else {
result = "";
}
}
return result;
}
如果我给它一个真实的陈述,它会工作,
findLineWithChar(new Scanner("Look here!\nLook there!\nExtra extra!"), 'x')
返回Extra extra!
,但是 findLineWithChar(new Scanner("看这里!\n看那里!\n额外的额外!"),'q') 返回 NullPointerException。我该如何处理?
解决方案
首先,Javadoc 注释位于方法之前(并以 开头/**
)。其次,这里不需要数组;只需计数以确保您不消耗超过十行(假设这是必要的)。我不会设置返回变量并打破循环,而是在找到匹配行时返回。我也更愿意String.indexOf(int)
建立一个字符String
进行比较。并且,在没有匹配项时添加默认返回值。喜欢,
/**
* findLineWithChar returns line in scanner if line has char c
*
* @param scanner
*
* @param c
*/
public static String findLineWithChar(Scanner scn, char c) {
int counter = 0;
while (scn.hasNextLine() && counter < 10) {
String line = scn.nextLine();
if (line.indexOf(c) > -1) {
return line;
}
counter++;
}
return "";
}
推荐阅读
- javascript - 超链接不适用于 ajax / jquery?
- python - Python多处理性能问题
- javascript - 通过比较两个条件删除嵌套数组对象
- c# - 语音识别和文本到语音
- javascript - 使用 discord.js V12 获取消息对我不起作用。[Discord.js V12]
- javascript - Firebase 文档中用于创建应用程序的不一致 (?)
- python - 在 pandas 中组合单独的每日 CSV
- scala - scala spark:将范围内的列表收集到一行中
- arrays - 如何比较数组的指定类型元素?
- python - Pandas 数据框按日期删除行