在处理

时间:2016-12-18 23:44:41

标签: java arraylist processing

我目前正在尝试将.txt文件(字幕文件)解析为.csv表。

文件中的示例:

22
00:03:36,717 --> 00:03:38,344
(thunder crashing)

我认为使用StringList类型是我最好的选择,我几乎准备好了所有信息。唯一剩下的就是,我希望第二行有起始位置。和结束位置。是一个单独的字符串,彼此跟随,像这样:

22
00:03:36,717
00:03:38,344
(thunder crashing)

我已经知道如何使用substring()方法,但我无法弄清楚如何在特定索引处添加新String。 set函数会覆盖它,而appends函数只能将它添加到列表的末尾。

后见之明是否更好地使用了ArrayList?我试过这样做,但后来我无法弄清楚如何使用实际的元素。我有这个:

String s[] = loadStrings("subtest.txt");
ArrayList lines= new ArrayList();

for (int i=0; i<s.length; i++){
  lines.add(s[i]);
}

ArrayList的单独元素中添加了所有行。现在我无法将该元素作为字符串访问。如果我想得到一个特定元素的长度,它会告诉我length()函数不存在,我也不能将该元素保存为字符串。

感谢您对此进行调查!

2 个答案:

答案 0 :(得分:0)

问题在于,默认情况下,ArrayList包含Object的列表,而不是String的列表,因此您从中获取的对象将属于错误的数据类型。由于ArrayList.get()的结果是Object,因此您无法将其分配给String或调用String类的方法(例如String.length() )。

你想要的是type generics。因为ArrayList是泛型类,所以可以使用泛型语法指定它应该包含的对象类型:

ArrayList<String> lines = new ArrayList<String>(); //creates a list of Strings

处理在documentation of the ArrayList class中提供了更完整的示例。

答案 1 :(得分:-1)

考虑XY problem,您可能需要用新行替换" --> ",如下所示:

MainP:

public static void main ( String [ ] args ) throws IOException
    {
        Path path = Paths.get("yourFilePath.txt");
        Charset charset = StandardCharsets.UTF_8;

        String content = new String(Files.readAllBytes(path), charset);
        content = content.replaceAll(" --> ", "\n");
        Files.write(path, content.getBytes(charset));

    }

输入:

1
00:00:00,000 --> 00:00:01,567
Anteriormente en Vikings...

2
00:00:01,765 --> 00:00:03,298
Voy a ir de nuevo a saquear Inglaterra,

3
00:00:03,300 --> 00:00:05,233
para la venganza de la
destrucción del asentamiento.

输出:

1
00:00:00,000
00:00:01,567
Anteriormente en Vikings...

2
00:00:01,765
00:00:03,298
Voy a ir de nuevo a saquear Inglaterra,

3
00:00:03,300
00:00:05,233
para la venganza de la
destrucción del asentamiento.

注意:这样就会覆盖输入文件。