对于这个写法,实际上对于oldStr是一个char[]数组[h,e,l,l,0,,,c,l,a,r,k],对于subString操作,newStr并不是自己copy oldStr的char[]数组hello自己去创建一个新的char[]数组,而是java在背后进行了String Reusing Optimization,它不会自己创建一个新的char数组,而是reuse原来的char数组。所以了,这样就不会有很多的原来的char[]数组的碎片。但是这个虽然在一般情况是好,不过也是有代价的。根据http://nflath.com/2009/07/the-dangers-of-stringsubstring/上,因为字符串不是自己新建一个char[]数组,而是引用了原来的char[]数组,这样oldStr就无法garbage collected ,因为newStr还是拥有oldStr的char[]数组的引用。这样容易引起Outof Memory 异常。解决办法是了,便是让newStr拥有自己的char[]数组,也就是自己在subString时强迫创建自己的char[]数组,这样就不会有garbage collected 的问题(reachable but unused!) 怎么办:
二、再说一说split等几个设计到正则表达式作为参数的函数。
第一点,split函数底层是调用的subString函数,所有首先存表时自觉注意重新new一个对象。
第二点,如果你的split函数分割的最后有长度为0的空字符串,那么slipt函数会忽略最后的空串额
第三点,注意特殊字符串的转义。如执行:"2|33|4".split("|")
出来的结果是:
""
2
|
3
3
|
4
奇怪吧,不过注意看一下API说明还是知道原因的.
java.lang.string.split
split 方法
将一个字符串分割为子字符串,然后将结果作为字符串数组返回。
stringObj.split([separator,[limit]])
参数
stringObj
必选项。要被分解的 String 对象或文字。该对象不会被 split 方法修改。
separator
可选项。字符串或 正则表达式对象,它标识了分隔字符串时使用的是一个还是多个字符。如果忽略该选项,返回包含整个字符串的单一元素数组。
limit
可选项。该值用来限制返回数组中的元素个数。
说明
split 方法的结果是一个字符串数组,在 stingObj 中每个出现 separator 的位置都要进行分解
所以正常的写法是这样的:
1、如果用“.”作为分隔的话,必须是如下写法:String.split("\\."),这样才能正确的分隔开,不能用String.split(".");
2、如果用“|”作为分隔的话,必须是如下写法:String.split("\\|"),这样才能正确的分隔开,不能用String.split("|");
“.”和“|”都是正则表达式中的特殊字符,必须得加"\\"进行转义;
3、如果在一个字符串中有多个分隔符,可以用“|”作为连字符,比如:“a=1 and b =2 or c=3”,把三个都分隔出来,可以用String.split("and|or");
所以到这里正常人都应该联想到string中不止split,还有replaceAll、replaceFrist、matches等几个以正则表达式作为参数时需要将特殊字符转义处理了。
相关推荐
在SQL Server中,"split功能"通常指的是将一个字符串拆分成多个部分,这在处理以特定分隔符分隔的数据时非常有用。SQL Server并没有内置的`SPLIT`函数,但可以通过其他方式来实现这个功能。下面我们将详细介绍如何在...
Java函数速查是一个非常实用的资源,对于程序员来说,它是一个高效的工具,帮助开发者快速查找和理解Java语言中的各种函数用法。这个压缩包可能包含了详细的函数文档、示例代码和可能的分类索引,方便用户按需查找。...
Java的`String`类提供了大量方法,如`substring()`截取子串,`indexOf()`查找子串,`trim()`去除空格,`concat()`连接字符串,以及`split()`分割字符串等。开发者可能会根据需求自定义一些额外的实用函数。 3. **...
### JavaScript 函数详解:split()、join()、substring() 和 indexOf() #### 一、split() 方法 **定义与用途:** `split()` 方法用于将一个字符串分割成字符串数组。此方法通过一个指定的分隔符来拆分字符串,并...
本文介绍了如何在SQL Server环境中实现一个支持Ntext类型字符串输入的自定义Split函数。通过这个函数,我们可以轻松地将大型文本数据分割成多个部分,这对于处理复杂的数据集非常有用。希望本文能对您理解和应用...
这里我们将讨论两种在SQL中实现SPLIT函数的方法。 **方法1** 首先,我们来看第一种实现方式,创建名为`f_split`的用户定义函数(UDF)。这个函数接受两个参数:`@SourceSql`是要被分割的字符串,`@StrSeprate`是...
本文将深入探讨一个用于读取文件内容的Java函数,同时分析其工作原理、潜在问题以及如何使用该函数来处理文件数据。 ### 函数定义与解析 首先,我们来看函数的定义: ```java public static String readFile...
总的来说,理解和掌握DB2中的字符串分隔函数、字符串函数以及过程的使用,对于日常的数据处理工作至关重要。它们能够帮助我们有效地操作和管理数据库中的字符串数据,提高工作效率。在实际应用中,应根据具体场景...
Java 中有多种方式可以实现字符串截取,包括使用 `substring`、`split` 和 `StringTokenizer` 等方法。在本例中,我们使用 `substring` 方法来实现字符串截取。 substring 方法 `substring` 方法用于从字符串中...
explode函数通过子字符串进行分割,效率比split要高 split函数语法如下 split(pattern, string) split通过正则表达式对字符串进行分割,效率相对explode要低,但是功能强大 <?php $list = explode("_",...
SQL实现Split函数的脚本是指使用SQL语言创建一个函数,以实现将一个字符串按照指定的分隔符拆分成多个子字符串,并将其返回为一个表的形式。下面是该函数的详细介绍。 函数定义 首先,我们需要定义一个函数,函数...
1. 个数统计函数: count 29 2. 总和统计函数: sum 29 3. 平均值统计函数: avg 30 4. 最小值统计函数: min 30 5. 最大值统计函数: max 30 6. 非空集合总体变量函数: var_pop 30 7. 非空集合样本变量函数: var_samp 31...
你可以使用这个函数来分割字符串,例如`SELECT * FROM dbo.f_split('dfkd,dfdkdf,dfdkf,dffjk', ',')`,这将返回一个包含所有分隔元素的表。 其次,如果你只需要知道一个字符串中有多少个分隔符,可以创建一个函数...
根据给定的文件标题、描述、标签以及部分内容,本文将深入探讨C#中字符串操作及其函数使用方法。在C#编程语言中,字符串是极为重要的数据类型,它们用于存储和处理文本信息。C#提供了丰富的内置函数和方法来操作字符...
在IT行业中,尤其是在大数据处理领域,Hive是一个广泛使用的数据仓库工具,它允许用户通过SQL-like语法查询和管理大规模的数据集。"一些有用的自定义配置单元udf函数、特殊数组、json、数学、字符串函数。___下载....
`length`、`charAt(index)`、`charCodeAt(index)`、`concat()`、`indexOf()`、`lastIndexOf()`、`replace()`、`slice()`、`split()`、`substr()`、`substring()`、`toLowerCase()`、`toUpperCase()` 和 `trim()` ...
第二个`CutString`函数则更为简单,它直接通过`Substring`方法来截取字符串,如果输入字符串的长度超过指定长度,则返回前`len`个字符加上一个省略号。这通常用于显示预览或限制文本的显示长度。 ### 2. 字符串长度...
在MySQL数据库中,`SPLIT`函数并不是内置的函数,但我们可以使用其他方式来实现类似的功能,即字符串分隔。通常,我们用`SUBSTRING_INDEX()`或`REGEXP_REPLACE()`结合`FIND_IN_SET()`来分割字符串。这些函数在处理...
- 分割字符串函数“split”,集合查找函数“find_in_set”。 八、集合统计函数 集合统计函数用于进行数据的统计分析。 - 个数统计函数“count”,总和统计函数“sum”。 - 平均值统计函数“avg”,最小值统计函数...