我有一个'文本'文件,我必须逐行读取数据。文件包含大约1330行。我需要读取每一行(这是一个String),然后将其拆分为子串,这些子串将作为数据插入到数据库中。
我必须拆分的字符串长度大约有2750个字符。分割此String的1个选项将使用'substring(start,end)'方法。但是,由于该行有2750个字符,分割字符串的数量将在200 - 225左右(我有映射表明某些字符长度将在Xml中具有什么字符串)。
有人可以提出任何其他分割这些字符串的技巧吗?
答案 0 :(得分:3)
我怀疑,根据您的数字,您的初始方法将完全符合任何标准JVM内存限制。
与以往一样,过早优化是万恶之源。我会尝试一个简单的拆分,如果你有问题,可以改进它。我怀疑在一行2700个字符上有200个字符串你不会有问题。
请注意,String
对象实现了flyweight pattern。也就是说,substring()
不会复制字符串,而只会报告原始String
数据(char数组)上的窗口。因此,使用substring()
的实现将使用非常少的额外内存(为了它的价值)
答案 1 :(得分: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);
答案 2 :(得分:0)
由于您已经定义了开始/结束,并且似乎甚至不需要解析字符串,因此子字符串调用可能是最快的方法。子字符串中的查找将命中数组索引,内存中的地址,因此查找可能是O(1)...然后Java可能会复制出所需的特定字符串,但这无论如何都必须发生,并且只会如果没有重叠,O(n)甚至可以用于所有子串。
substring实际上并没有改变底层字符串,它只是要复制出你在每次调用时寻找的相关部分(如果它甚至这样做,理论上它可能会返回一种字符串封装了原始字符串)。除非您确定了实际的性能问题,否则最简单的解决方案是最好的解决方案。
如果你不得不拆分,例如逗号,我会使用CSVReader库。