gpt4 book ai didi

Java .split() 越界

转载 作者:行者123 更新时间:2023-12-02 10:44:24 26 4
gpt4 key购买 nike

我的代码有问题。

我正在尝试从 .txt 文件中提取 channel 名称。我不明白为什么方法 line.split() 给我返回一个长度为 0 的数组:

有人可以帮助我吗?

这是文件.txt:

------------------------[ channel .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);
}
}

当然,如果您有任何以 '#' 开头但不匹配的行,您也会遇到类似的问题。

使用正则表达式和捕获组可能可以更好地完成此类事情。

关于Java .split() 越界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52693305/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com