var persons = new kendo.data.ObservableArray(
[
{
name: "John Doe",
age: 28,
hobbies: [
{ id: 1, description: "Baseball", rank: 1 },
{id: 2, description: "music", rank: 3 },
{ id: 3, description: "Surfing the web", rank: 2}
]
},
{
name: "Jane Doe",
age: 24,
hobbies: [
{ id: 1, description: "Volley Ball", rank: 1 },
{id: 2, description: "Cricket", rank: 3 },
{ id: 3, description: "Hockey", rank: 2}
]
}
]
);
var viewModel = kendo.observable({
array: persons
});
kendo.bind($("#example"), viewModel);
<h2>Persons Array</h2><br/>
<div id="example" data-template="template" data-bind="source: array">
</div>
<script id="template" type="text/x-kendo-template">
<div>
Name: #=name# || Age: #=age# <br>
<ul>Hobbies (below, I want to display hobbies)</ul>
<br/>
</div>
</script>
test2有四个元素
String string = "Hello,,l,, World";
String test1[] = string.split(",,");
String test2[] = StringUtils.splitPreserveAllTokens(string , ",,");
有两个空元素。 Test1有3个
[Hello, , l, , World]
这是预期的行为。
根据[Hello, l, World]
的javadoc,以下是逻辑
splitPreserveAllTokens
但是我仍然不清楚test2输出。 请解释test2的其他空元素。
答案 0 :(得分:3)
在文档中读到:
相邻的分隔符被视为空标记的分隔符。
和
separatorChars - 用作分隔符的字符,空格上的空分割
意思是如果你使用&#34;,&#34;它应该没有任何区别。或&#34; ,,&#34;作为第二个论点。
结合第一个引用和示例,我假设字符串的开头和结尾都被视为分隔符:
StringUtils.splitPreserveAllTokens(":cd:ef:", ":")
开始和第一个冒号之间的一个(空)标记,第一个和第二个冒号之间的一个标记(&#34; cd&#34;),第二个和第三个之间的一个标记(&#34; ef&#34;)和一个(再次为空)在最后一个冒号和字符串结尾之间导致文档的显示结果:["", "cd", "ef", ""]
(带有更正的拼写错误)。
在您的情况下,上面的第二个引用是更相关的引用。 &#34; ,,&#34;不被视为分隔符,而是作为一组分隔符。含义&#34; ,,&#34;相当于&#34;,&#34;在这种情况下。然后按照第一个引用,你可以解释你得到的结果:
字符串的开头到第一个,
:&#34;你好&#34;
第一个逗号到第二个:&#34;&#34;
第二个逗号到第三个:&#34; l&#34;
thrid to forth:&#34;&#34;
字符串的结尾:&#34;世界&#34;
答案 1 :(得分:0)
String string = "Hello$l$ World";
String test1[] = string.split("$$");
String test2[] = StringUtils.splitPreserveAllTokens(string , "$$");
输出:
Test2 [Hello, l, World]
Test1 [Hello$l$ World]
以下是splitPreserveAllTokens的代码
// standard case
while (i < len) {
if (separatorChars.indexOf(str.charAt(i)) >= 0) {
if (match || preserveAllTokens) {
lastMatch = true;
if (sizePlus1++ == max) {
i = len;
lastMatch = false;
}
list.add(str.substring(start, i));
match = false;
}
start = ++i;
continue;
}
lastMatch = false;
match = true;
i++;
}
}
这意味着分隔符字符将被视为一组单独的分隔符字符。每当在主字符串上找到任何分隔符时,它将被分割。
使用此方法优于常规拆分的优势是
splitPreserveAllTokens方法隐式处理null。
如上所述
StringUtils中的使用splitWorker(String str,char separatorChar,boolean preserveAllTokens),它是自己的方法,它是2.0的性能调优(JDK1.4)。 Difference between splitByWholeSeparatorPreserveAllTokens and split