如何解决“String.substring(int, int) 行:不可用”导致错误 测试字符串的替代方案
不知何故,我使用子字符串检查 .txt 文件的 if 循环导致了问题。没有 if 循环,一切正常。但是有了它,文本文件中的空行似乎导致它崩溃。它一直工作到文件中的第一个空行,然后我收到此错误。我该怎么办?
代码:
public class S1_Blockchain extends ConsoleProgram {
public void init() {
setSize(400,250);
setFont("Arial-bold-18");
BufferedReader br = null;
String line;
try {
br = new BufferedReader(new FileReader("block_chain.txt"));
while((line = br.readLine()) != null){
if(line.substring(0,1).equals("T") || line.substring(0,1).equals("G")) {
System.out.println(line);
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
解决方法
您可能还想检查空字符串:
if( !line.trim().isEmpty() && (line.substring(0,1).equals("T") || line.substring(0,1).equals("G"))) { ... }
然后您可能还想重构代码以使其更具可读性:
public class S1_Blockchain extends ConsoleProgram {
public void init() {
setSize(400,250);
setFont("Arial-bold-18");
BufferedReader br = null;
String line;
try {
br = new BufferedReader(new FileReader("block_chain.txt"));
while((line = br.readLine()) != null){
if(shouldConsider(line)) {
System.out.println(line);
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
private boolean shouldConsider(String line){
return !line.trim().isEmpty()
&&
(line.substring(0,1).equals("G"));
}
,
因此,您针对 empty 字符串 ""
(不愉快的路径)测试了第一个边缘情况。
接下来您可以使用trim()
(去除周围的空格)来避免有效的空情况:
- 像
" Trouble Centered "
这样的间隔输入变得修剪`“以问题为中心”(因此以可能需要的“T”开头)。 - 和空白行,如
" "
变成空字符串""
(这会破坏一些测试)
br = new BufferedReader(new FileReader("block_chain.txt"));
while((line = br.readLine()) != null){
line = line.trim(); // remove white-spaces; blank line results as empty
if (line.isEmpty()) {
// might handle or ignore this case
}
firstChar = line.charAt(0); // expresses intend better than substring
if (Set.of('T','G').contains(firstChar) { // the Set improves readability for condition
System.out.println(line);
}
}
测试字符串的替代方案
A) 单独的测试:
- 还可以使用
line.isBlank()
测试空白(甚至没有空格)或空白(只有空格)
- 还可以使用
line.startsWith("T")
测试字符串的开头
B) 多合一(您的情况):
- 使用正则表达式捕获所有情况:
line.matches("^\\s*(G|T)")
除了检查您的字符串是否为空外,您还必须检查它是否为空字符串 ("")。您可以将其检查为 line.trim().legth() == 0;
或 line.isEmpty()
,但也有名为 StringUtils 的 Apache Utils。有一种方法 isBlank(String str)
可以一次性检查 String 是否为空或空。这就是我推荐的
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。