在java中从字符串中获取部分内容的最佳方法

Mad*_*esh 2 java regex memory string stringbuilder

我有一个像下面的字符串

12SELVASOFTWAREENGINEER................323
Run Code Online (Sandbox Code Playgroud)

这个字符串长度超过 10000

此字符串的前两个字母是员工ID

所以我可以得到我的员工ID如下

String empid = str.substring(0,2);
Run Code Online (Sandbox Code Playgroud)

但是这个字符串为原始字符创建了相同的空间String,因此会发生内存泄漏.

怎么避免这个?

他们的任何替代或有效方式是他们在java中获取字符串的一部分

任何帮助将不胜感激!!!

Ste*_*n C 5

...但是这个字符串为原始string创建了相同的空间.因此会发生内存泄漏.

我认为您指的String是旧版Java中的行为,其中String.substring(...)创建了一个共享原始String对象的后备数组的对象.正如您所指出的,这可能会导致内存泄漏; 例如,如果原始字符串变得无法访问而子字符串没有.

相关代码可以在这里看到:

在Java 7中修复了此问题.

在Java 7之前,标准的解决方法是执行以下操作:

   String empid = new String(str.substring(0, 2)); 
Run Code Online (Sandbox Code Playgroud)

(new String(...)创建一个不与原始字符串或子字符串共享其后备数组的字符串.)

但是,只有在以下情况下才建议这样做:

  • 你正在使用Java的旧版本,
  • 原始字符串可能很大,而且
  • 子串很可能是长寿的.