Java 有效字符串拆分

Java 有效字符串拆分,java,string,performance,split,Java,String,Performance,Split,我有一个“文本”文件,我必须从中逐行读取数据。该文件包含大约1330行。我需要读取每一行(这是一个字符串),然后将其拆分为子字符串,这些子字符串将作为数据插入数据库 我能够逐行读取文件中的数据 我也能将数据插入数据库 我必须拆分的字符串长度约为2750个字符。1拆分此字符串的选项将使用“子字符串(开始,结束)”方法。但是,由于该行有2750个字符,拆分字符串的数量将非常大,大约为200-225(我有一个映射,它表明某些字符长度将包含Xml中的字符串) 有人可以建议其他拆分这些字符串的方法吗?

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

  • 我能够逐行读取文件中的数据
  • 我也能将数据插入数据库
我必须拆分的字符串长度约为2750个字符。1拆分此字符串的选项将使用“子字符串(开始,结束)”方法。但是,由于该行有2750个字符,拆分字符串的数量将非常大,大约为200-225(我有一个映射,它表明某些字符长度将包含Xml中的字符串)

有人可以建议其他拆分这些字符串的方法吗?

您可以使用
String
类的
split()
方法拆分字符串,但要拆分该字符串,必须使用逗号、破折号等分隔符,并且使用该分隔符可以拆分字符串

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

/* delimiter */
String delimiter = "-";
/* given string will be split by the argument delimiter provided. */
temp = str.split(delimiter);
您可以使用
String
类的
split()
方法来拆分字符串,但要拆分该字符串,必须使用逗号、破折号等分隔符,并且使用该分隔符可以拆分字符串

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

/* delimiter */
String delimiter = "-";
/* given string will be split by the argument delimiter provided. */
temp = str.split(delimiter);

我猜想,考虑到您的数量,您的初始方法将完全符合任何标准JVM内存约束

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


请注意,
字符串
对象实现了一个。也就是说,
substring()
不复制字符串,而只是在窗口上报告原始
字符串的数据(字符数组)。因此,使用
substring()
的实现将使用很少的额外内存(不管它值多少钱)

我怀疑,根据您的数字,您的初始方法将在任何标准JVM内存约束范围内

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


请注意,
字符串
对象实现了一个。也就是说,
substring()
不复制字符串,而只是在窗口上报告原始
字符串的数据(字符数组)。因此,使用
substring()
的实现将使用很少的额外内存(值得一提)

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

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


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

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

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


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

您是否有任何迹象表明最简单的方法实际上会导致任何问题?即使按照ZX频谱标准,数字200也不是很大,在您使用
子字符串的特殊情况下
由于所有字符串共享相同,因此所涉及的内存更少,原始
char[]
@Marko-48Kb频谱同意。16Kb可能会很挤!:-)@BrianAgnew我的宝宝有48K,所以叫我偏见:)你有没有任何迹象表明最简单的方法实际上会导致任何问题?即使按照ZX频谱标准,数字200也不是很大,在你使用
子字符串的特殊情况下,由于所有字符串共享相同的原始
char[],因此所涉及的内存更少
@Marko-48Kb频谱同意。16Kb可能会很挤!:-)@我的孩子有48K,所以说我有偏见:)