拆分存储在变量

时间:2016-01-12 17:37:58

标签: java split

我正在使用ETL,我将所有文件名存储在像这样的上下文变量中

context.variablename = context.variablename+input_column

此变量的输出如下:

context.variablename = 01-01-2015.csv.good, 01-02-2015.csv.bad, 01-03-2015.csv.good, 01-04-2015.csv.bad

在input_column中我有像这样的文件列表

  

01-01-2015.csv.good
  01-02-2015.csv.bad
  01-03-2015.csv.good
  01-04-2015.csv.bad

我想根据扩展名将文件名拆分为两个变量。

因此,context.goodfilevariable将仅存储这些文件:

  

01-03-2015.csv.good
  01-01-2015.csv.good

虽然context.badfilevariable只会存储这些文件:

  

01-02-2015.csv.bad
  01-04-2015.csv.bad

如何使用Java实现这一目标?

1 个答案:

答案 0 :(得分:0)

String更有用的数据结构用于存储多个Object s(在您的情况下为String)是ArrayList。这些可以存储任意数量的相同类的单独Object,堆栈内存提供。您可以写下以下内容:

// Reading the input
BufferedReader reader = ... // And initialize the reader
ArrayList<String> input = new ArrayList<>();
while (reader.hasNextLine())
    input.add(reader.readLine());

// Storing the input
ArrayList<String> good = new ArrayList();
ArrayList<String> bad = new ArrayList();
for (String s : input) {
    sections = s.split(".");
    if (sections[sections.length - 1].equals("good"))
        good.add(s);
    else if (sections[sections.length - 1].equals("bad"))
        bad.add(s);
    else
        throw new IOException("Invalid filename.");
}

// Do whatever you want with the good and bad ArrayLists after this.
// If you want arrays, you can use ArrayList's toArray() method.

有些注意事项:

  • 在这种情况下,我们使用存储类类型ArrayList初始化String,并将类名放在菱形运算符<>中。
  • new ArrayList<>()中的第二个空白钻石是由于类型推断。此功能仅适用于Java 8,因此如果您使用的是旧版本,则需要将类名放在运算符中。
  • for (String s : input)与标准for循环不同。这称为增强的for循环,它迭代实现Iterable的数组或类的所有项。
  • String.split(String)方法通过给定的分隔符拆分String(由名称显示)。