java - Java .split() 越界
问题描述
我的代码有问题。
我正在尝试从 .txt 文件中提取频道的名称。我不明白为什么该方法line.split()
会返回一个长度为 0 的数组:
有人可以帮助我吗?
这是文件 .txt:
------------[channels.txt]----------
...
#CH id="" tvg-name="Example1" tvg-logo="http...
#CH id="" tvg-name="Example2" tvg-logo="http...
#CH id="" tvg-name="Example3" tvg-logo="http...
#CH id="" tvg-name="Example4" tvg-logo="http...
...
这是我的代码:
try {
FileInputStream VOD = new FileInputStream("channels.txt");
BufferedReader buffer_r = new BufferedReader(new InputStreamReader(VOD));
String line;
ArrayList<String> name_channels = new ArrayList<String>();
while ((line = buffer_r.readLine()) != null ) {
if (line.startsWith("#")) {
String[] first_scan = line.split(" tvg-name=\" ", 2);
String first = first_scan[1]; // <--- out of bounds
String[] second_scan = first.split(" \"tvg-logo= ", 2);
String second = second_scan[0];
name_channels.add(second);
} else {
//...
}
}
for (int i = 0; i < name_channels.size(); i++) {
System.out.println("Channel: " + name_channels.get(i));
}
} catch(Exception e) {
System.out.println(e);
}
解决方案
所以你有这样的例子
#CH id="" tvg-name="Example1" tvg-logo="http...
并试图拆分这些字符串
" tvg-name=\" "
" \"tvg-logo= "
这些字符串都没有在示例中。附加了一个虚假的空格,第二个开头的空格位于错误的位置。
修复字符串,这是一个简洁但完整的程序来演示
interface Split {
static void main(String[] args) {
String line = "#CH id=\"\" tvg-name=\"Example1\" tvg-logo=\"http...";
String[] first_scan = line.split(" tvg-name=\"", 2);
String first = first_scan[1]; // <--- out of bounds
String[] second_scan = first.split("\" tvg-logo=", 2);
String second = second_scan[0];
System.err.println(second);
}
}
当然,如果您有任何以开头'#'
但不匹配的行,您将遇到类似的问题。
使用正则表达式和捕获组可能会更好地完成这类事情。
推荐阅读
- mysql - Sequelize LEFT JOIN 仅单列值
- python - kivy 属性错误有问题。如何修复 AttributeError:'NoneType' 对象没有属性 'property'
- azure - 为什么我的 Azure Devops Pipeline Artifact 在下载后被另一个进程锁定?
- python - 使用 Python 的 write 方法在文件开头使用此代码的意外间距?
- angular - Angular中有什么方法可以通过我可以一一显示问题在发布请求中发送答案
- python - 拖放到 QPlainTextBox
- rest - 是否建议使用 Swagger 编辑器生成的服务器或客户端代码?
- xslt - 基于从现有节点搜索创建新节点
- flutter - DropdownButtonFormField 的选定值仅在我重新加载整个应用程序时出现
- c - 获取没有最后一个成员的结构的大小