java 拆分结果未知
java split with unknown result
对于以下代码,
为什么2,3,5,6,8位置有空串?
那为什么"b",":andf","1"后面没有空串呢?
String[] splitStrs = "booo:and:fooo1o".split("o", -1);
System.out.println(splitStrs.length);
for (int i=0; i<splitStrs.length; i++) {
System.out.println("\"" + splitStrs[i]+ "\"");
}
输出为:
8
"b"
""
""
":and:f"
""
""
"1"
""
why there is empty string in position 2,3,5,6,8?
在“o”上拆分时,“ooo”中的 o 之间没有任何内容,因此是空字符串。
then why "b", ":andf", "1" has no empty string behind?
但是 输出末尾有一个空字符串,即在“1”后面。
根据 documentation,负数第二个参数具体表示“未丢弃尾随空字符串”。
始终阅读文档。
Public String [ ] split ( String regex, int limit ) Parameters:
regex – a delimiting regular expression
Limit – the resulting
threshold
limit参数可以有3个值:
- limit > 0 – 如果是这种情况,则该模式将应用于
最多 limit-1 次,结果数组的长度不会超过
比 n,并且结果数组的最后一个条目将包含所有输入
超过最后一个匹配的模式。
- limit < 0 – 在这种情况下,
pattern 将被应用尽可能多的次数,结果
数组可以是任意大小。
- limit = 0 – 在这种情况下,模式将
被应用尽可能多的次数,得到的数组可以是
任何大小,尾随的空字符串都将被丢弃。
请访问 GeeksforGeeks site 了解更多关于拆分的信息。
"booo:and:fooo1o".split("o", -1);
why there is empty string in position 2,3,5,6,8?
由于限制是 -1 我们可以将它拆分任意次。当 'o' 用作正则表达式时,它将给出它之前的所有值,因为它没有值 returns empty string
then why "b", ":andf", "1" has no empty string behind?
没有空字符串,因为 'o' 上一个匹配后有字符。
看这个例子:
class Split{
public static void main(final String ... $){
var out = System.out;
final String s = "ooa";
for(final String str : s.split("o", -1))
out.println("\""+str+"\"");
}
}
输出:
$ javac Split.java && java Split
""
""
"a"
为什么这样输出?
当第一次匹配发生时 @ index 0 这也是第一个字符并且它之前是 returns 字符串但是因为没有字符串它 returns 一个 空字符串 .
然后当第二次匹配发生时 o @index 1 它 returns 第一个匹配之后和索引 1 之前的字符串。因为没有字符它 returns 一个 空字符串 .
在那之后 returns a.
split
方法将找到所有需要字符的地方(在您的示例中为“o”),在当前“o”和下一个“o”之间放置一个新的(子)字符串,不带“ o" 字符,在数组中,并继续整个字符串。
如果有,例如“oo”,它将是“”,因为这 2 个“o”字符之间没有任何内容。
我们举个例子。你有一个字符串“哦,你好安娜!我从 2010 年代就没见过你了!”并将此字符串拆分为“a”字符的每个位置。
首先,从第一个字符开始,然后找到下一个字母“a”在哪里,在第14个索引处找到。从开始到“a”所在的地方取一部分字符串并将其添加到数组中。数组的第一个元素看起来像“哦,你好,安”(“A”和“a”是不同的字符)。然后从我找到的那个“a”开始(第 14 个索引)并找到下一个“a”,在我们的示例中它位于第 20 个索引中。从第一个和第二个“a”中取出一部分字符串并将其复制到一个数组中。然后这个过程一直持续到字符串的末尾。
结果将是:
"Oh, hello Ann"
"! I h"
"vent seen you since 2010s!"
如果我们在每个“n”上拆分相同的字符串,使用相同的逻辑,我们将得到:
"Oh, hello A"
""
"a! I have"
"t see"
" you si"
"ce 2010s"
我在第二部分得到空字符串的原因是因为在“...Anna...”中,这 2 个“n”字符之间没有任何内容
可以在以下位置找到一些示例:https://www.geeksforgeeks.org/split-string-java-examples/
对于以下代码,
为什么2,3,5,6,8位置有空串?
那为什么"b",":andf","1"后面没有空串呢?
String[] splitStrs = "booo:and:fooo1o".split("o", -1);
System.out.println(splitStrs.length);
for (int i=0; i<splitStrs.length; i++) {
System.out.println("\"" + splitStrs[i]+ "\"");
}
输出为:
8
"b"
""
""
":and:f"
""
""
"1"
""
why there is empty string in position 2,3,5,6,8?
在“o”上拆分时,“ooo”中的 o 之间没有任何内容,因此是空字符串。
then why "b", ":andf", "1" has no empty string behind?
但是 输出末尾有一个空字符串,即在“1”后面。
根据 documentation,负数第二个参数具体表示“未丢弃尾随空字符串”。
始终阅读文档。
Public String [ ] split ( String regex, int limit ) Parameters:
regex – a delimiting regular expression
Limit – the resulting threshold
limit参数可以有3个值:
- limit > 0 – 如果是这种情况,则该模式将应用于 最多 limit-1 次,结果数组的长度不会超过 比 n,并且结果数组的最后一个条目将包含所有输入 超过最后一个匹配的模式。
- limit < 0 – 在这种情况下, pattern 将被应用尽可能多的次数,结果 数组可以是任意大小。
- limit = 0 – 在这种情况下,模式将 被应用尽可能多的次数,得到的数组可以是 任何大小,尾随的空字符串都将被丢弃。
请访问 GeeksforGeeks site 了解更多关于拆分的信息。
"booo:and:fooo1o".split("o", -1);
why there is empty string in position 2,3,5,6,8?
由于限制是 -1 我们可以将它拆分任意次。当 'o' 用作正则表达式时,它将给出它之前的所有值,因为它没有值 returns empty string
then why "b", ":andf", "1" has no empty string behind?
没有空字符串,因为 'o' 上一个匹配后有字符。
看这个例子:
class Split{
public static void main(final String ... $){
var out = System.out;
final String s = "ooa";
for(final String str : s.split("o", -1))
out.println("\""+str+"\"");
}
}
输出:
$ javac Split.java && java Split
""
""
"a"
为什么这样输出?
当第一次匹配发生时 @ index 0 这也是第一个字符并且它之前是 returns 字符串但是因为没有字符串它 returns 一个 空字符串 .
然后当第二次匹配发生时 o @index 1 它 returns 第一个匹配之后和索引 1 之前的字符串。因为没有字符它 returns 一个 空字符串 .
在那之后 returns a.
split
方法将找到所有需要字符的地方(在您的示例中为“o”),在当前“o”和下一个“o”之间放置一个新的(子)字符串,不带“ o" 字符,在数组中,并继续整个字符串。
如果有,例如“oo”,它将是“”,因为这 2 个“o”字符之间没有任何内容。
我们举个例子。你有一个字符串“哦,你好安娜!我从 2010 年代就没见过你了!”并将此字符串拆分为“a”字符的每个位置。
首先,从第一个字符开始,然后找到下一个字母“a”在哪里,在第14个索引处找到。从开始到“a”所在的地方取一部分字符串并将其添加到数组中。数组的第一个元素看起来像“哦,你好,安”(“A”和“a”是不同的字符)。然后从我找到的那个“a”开始(第 14 个索引)并找到下一个“a”,在我们的示例中它位于第 20 个索引中。从第一个和第二个“a”中取出一部分字符串并将其复制到一个数组中。然后这个过程一直持续到字符串的末尾。
结果将是:
"Oh, hello Ann"
"! I h"
"vent seen you since 2010s!"
如果我们在每个“n”上拆分相同的字符串,使用相同的逻辑,我们将得到:
"Oh, hello A"
""
"a! I have"
"t see"
" you si"
"ce 2010s"
我在第二部分得到空字符串的原因是因为在“...Anna...”中,这 2 个“n”字符之间没有任何内容
可以在以下位置找到一些示例:https://www.geeksforgeeks.org/split-string-java-examples/