0

我有一个“文本”文件,我必须从中逐行读取数据。文件包含大约 1330 行。我需要读取每一行(这是一个字符串),然后将其拆分为子字符串,这些子字符串将作为数据插入到数据库中。

  • 我能够逐行读取文件中的数据。
  • 我也可以将数据插入数据库。

我必须拆分的字符串长度大约有 2750 个字符。拆分此字符串的 1 个选项将使用 'substring(start, end)' 方法。但是,由于该行有 2750 个字符,因此拆分字符串的数量将在 200 - 225 左右(我有映射表明某些字符长度将具有 Xml 中的字符串)。

有人可以建议任何其他拆分这些字符串的技术吗?

4

3 回答 3

3

我怀疑给定您的数字,您的初始方法将完全符合任何标准 JVM 内存限制。

与以往一样,过早的优化是万恶之源。我会尝试一个简单的拆分,如果您有问题,请考虑对其进行改进。我怀疑一行 2700 个字符的 200 个字符串不会有问题。

请注意,该String对象实现了享元模式。也就是说,substring()不复制字符串,而只是在窗口上报告原始String数据(char 数组)。因此,使用的实现substring()将使用很少的额外内存(对于它的价值)

于 2012-08-16T10:11:19.343 回答
0

您可以使用类的split()方法String来拆分字符串,但是要拆分该字符串,它必须具有一些分隔符,例如逗号,破折号或其他内容,并且使用该分隔符可以拆分字符串。

String str = "one-two-three";
String[] temp;

/* delimiter */
String delimiter = "-";
/* given string will be split by the argument delimiter provided. */
temp = str.split(delimiter);
于 2012-08-16T10:09:49.643 回答
0

由于您已经定义了开始/结束并且似乎甚至不需要解析字符串,因此子字符串调用可能是最快的方法。子字符串中的查找将命中数组索引,内存中的地址,因此查找可能是 O(1) ......然后也许 Java 会复制出所需的特定字符串,但这无论如何都必须发生,而且只会是如果没有重叠,即使对于所有子字符串也是 O(n)。

substring 实际上并没有改变底层字符串,它只是在每次调用时复制出你正在寻找的相关部分(如果它甚至这样做,理论上它有可能返回一种封装了原始字符串)。除非您确定了实际的性能问题,否则最简单的解决方案就是最好的解决方案。

例如,如果您必须拆分逗号,我会使用 CSVReader 库。

于 2012-08-16T10:17:32.247 回答