对于字符串的分割主要有两种方式,使用String的split方法和使用StringTokenizer。现在假设我们有一个字符串“||a|b||c|d|||”,然后我们需要使用“|”来对它进行分割。那么如下两段代码你觉得输出结果会是什么呢?
public static void main(String args[]) { String str = "||a|b||c|d|||"; String strArray[] = str.split("\\|"); System.out.println(strArray.length); for (int i=0; i<strArray.length; i++) { System.out.println("strArray["+i+"] = " + strArray[i]); } } public static void main(String args[]) { String str = "||a|b||c|d|||"; StringTokenizer tokenizer = new StringTokenizer(str, "|"); int len = tokenizer.countTokens(); System.out.println(len); while (tokenizer.hasMoreTokens()) { System.out.println(tokenizer.nextToken()); } }
正确答案是第一段代码会输出如下:
7 strArray[0] = strArray[1] = strArray[2] = a strArray[3] = b strArray[4] = strArray[5] = c strArray[6] = d
第二段代码输出如下:
4 a b c d
下面这段代码呢?
public static void main(String args[]) { String str = "|||abcd||eacd|||"; StringTokenizer tokenizer = new StringTokenizer(str, "|ab"); int len = tokenizer.countTokens(); System.out.println(len); while (tokenizer.hasMoreTokens()) { System.out.println(tokenizer.nextToken()); } }
输出如下:
3 cd e cd
你答对了吗?接下来我们来解释一下为什么是上面的输出结果。
String的split方法分割
String的split方法接收的参数是一个正则表达式,其底层调用的是正则表达式的split方法。String的split方法源码是这样的:
public String[] split(String regex, int limit) { return Pattern.compile(regex).split(this, limit); }
而正则表达式Pattern的split方法是这样实现的:
public String[] split(CharSequence input, int limit) { int index = 0; boolean matchLimited = limit > 0; ArrayList<String> matchList = new ArrayList<String>(); Matcher m = matcher(input); // Add segments before each match found while(m.find()) { if (!matchLimited || matchList.size() < limit - 1) { String match = input.subSequence(index, m.start()).toString(); matchList.add(match); index = m.end(); } else if (matchList.size() == limit - 1) { // last one String match = input.subSequence(index, input.length()).toString(); matchList.add(match); index = m.end(); } } // If no match was found, return this if (index == 0) return new String[] {input.toString()}; // Add remaining segment if (!matchLimited || matchList.size() < limit) matchList.add(input.subSequence(index, input.length()).toString()); // Construct result int resultSize = matchList.size(); if (limit == 0) while (resultSize > 0 && matchList.get(resultSize-1).equals("")) resultSize--; String[] result = new String[resultSize]; return matchList.subList(0, resultSize).toArray(result); }
当分割的字符串中含有分隔符时,注意这段代码:
int resultSize = matchList.size(); if (limit == 0) while (resultSize > 0 && matchList.get(resultSize-1).equals("")) resultSize--; String[] result = new String[resultSize]; return matchList.subList(0, resultSize).toArray(result);
在没有限制分割数量的情况下,Pattern会把最末端为空串的元素都丢弃。所以当我们使用split方法以“|”为分隔符分割字符串“||a|b||c|d|||”时将会把最后三个空元素丢弃,也就出现了上面的结果。
StringTokenizer分割
StringTokenizer会把传递的分隔符拆分成一个个的字符,也就是char,然后会把每一个char都当成是一个分隔符。在进行字符串分割时会判断字符串的每一个字符是否在分隔符中,如果在则跳过这个字符,直到遇见不是分隔符的字符,然后把连续不是分隔符的字符组成一个串,如此往复。所以当我们使用“|”分割字符串"||a|b||c|d|||"时,StringTokenizer遇见分隔符“|”就跳过了,就会出现上述的结果。StringTokenizer的源码太多了我这里就不贴了,有兴趣的朋友可以自己去看。同样的道理,当我们使用“ab|”分割字符串“|||abcd||eacdf|||”时会把它分割成3个字符串,分别是“cd”、“e”、“cdf”。
相关推荐
在编程领域,字符串处理是一项基础且重要的任务,而...总之,字符串分割是数据处理的基础技能,无论你是初学者还是经验丰富的开发者,都需要熟练掌握这一技能。通过学习和实践,你将在处理文本数据时变得更加得心应手。
使用这个函数,你可以轻松地处理任何需要字符串分割的场景。例如,如果你有一个逗号分隔的字符串`'apple,banana,orange'`,你可以这样使用`SplitString`: ```delphi var Fruits: TStrings; begin Fruits := ...
在Delphi编程环境中,处理字符串是一项常见的任务,而“按字符串分割”是字符串操作中的一个核心功能。在Delphi中,我们可以使用内建的函数或类来实现这一操作,例如`SplitString`函数或者`TStringList`类。本文将...
在这个场景中,我们关注的是一个名为"pb split()"的自定义字符串分割函数。在Python或者其他语言中,内置的`split()`函数可能不能满足所有需求,因此开发者有时会自定义类似功能的函数来适应特定项目或优化性能。 `...
在编程领域,Fortran是一种历史悠久且广泛应用...通过这些自定义子程序,你可以灵活地在Fortran中执行字符串分割和替换操作,满足复杂的需求。理解并熟练掌握这些技巧,将使你在进行科学计算或数据处理时更加得心应手。
在本文中,我们将深入探讨如何使用Java进行字符串分割,以及涉及到的相关知识点。 ### 1. `split()`方法介绍 `split()`方法根据给定的正则表达式将字符串分割成数组。它的基本语法如下: ```java public String[] ...
你是否曾为繁琐的字符串分割工作而苦恼?现在,一款由 Python 编写的强大小工具闪亮登场!它能够根据你指定的字符,自动对字符串进行精准分割。无论你是数据分析师处理大量文本数据,还是程序员进行文本处理任务,这...
在C#编程语言中,字符串...这个练习文件可能包含了各种不同的字符串分割实例,旨在帮助你巩固和提高这方面的技能。通过实践,你将更深入地理解如何根据具体需求来选择合适的分隔符和选项,以及如何处理可能出现的问题。
RF字符串切割通常指的是将一个字符串分割成多个子串。正则表达式中的特殊字符如`|`(或)、`( )`(分组)、`\s`(空白字符)等可以帮助我们根据特定规则切割字符串。比如,如果你想根据空格切割字符串`"Hello World"`,...
在这里,`inputString`是你想要拆分的原始字符串,`delimiter`是用于标识子字符串边界的字符或字符串。例如,如果你有一个逗号分隔的字符串,你可以这样拆分: ```vb Dim str As String = "苹果,香蕉,橙子" Dim ...
`split()`方法接受一个正则表达式作为参数,然后根据这个正则表达式将字符串分割成多个部分,并返回一个字符串数组。如果正则表达式匹配到的是空字符串,那么相邻的字符也会被分割。 ### 2. 使用示例 下面是一个...
在编程领域,分割字符串函数是处理文本数据时非常常用的一种工具。它允许我们将一个长字符串按照特定的分隔符...通过解压并查看这些文件,你可以进一步加深对字符串分割的理解,并练习在不同场景下如何运用这些函数。
《SQL IN查询字符串分割工具详解》 在数据库操作中,SQL查询是我们不可或缺的工具,而IN查询作为一种常用的操作方式,其灵活性和效率受到广大开发者的青睐。然而,当IN查询的参数数量庞大时,手动拼接字符串就显得...
无论你选择哪种编程语言,理解和熟练掌握字符串分割技巧都是非常重要的,因为这是处理和分析文本数据的基本步骤。在实际应用中,你可能会遇到更复杂的场景,比如处理多字符分隔符、忽略空格、处理转义字符等,这些都...
在Delphi 7中,处理字符串是编程过程中常见...了解了这些基础知识后,你就能在Delphi 7中灵活地处理各种字符串分割任务了。记得在实际项目中,根据需求选择最适合的方法,并进行适当的优化,以确保程序的稳定性和性能。
本文将深入探讨如何在各种编程语言中进行字符串分割以及一些基本的字符串运算,以帮助你更好地理解和应用这些技术。 首先,我们来关注“分割字符串”这一主题。字符串分割是将一个长字符串依据特定的分隔符切割成多...
例如,你可以使用`字符串分割`命令,它接受三个参数:原始字符串、分隔符和返回结果的数组。这个命令会按照分隔符将字符串切分,并将结果保存到数组中。这对于处理文本数据,如日志文件、CSV格式的数据,或者解析...
字符串分割通常涉及到`字符串分割`函数,它可以根据指定的分隔符将字符串切分成多个子串。例如,如果你有一个逗号分隔的数字列表,你可以使用该函数将其拆分成单独的数字字符串,然后再进行进制转换。 进制转换在...
在JavaScript中,`split()`函数是一个非常实用的字符串方法,用于将一个字符串分割成多个子字符串,并返回一个字符串数组。这个方法是基于指定的分隔符来切割原始字符串的。在深入探讨`split()`之前,我们需要理解...
这个详细教程应该包含了对Java字符串分割的全面介绍,从基本用法到高级技巧,帮助你更好地理解和运用这一功能。通过实践这些示例代码,你可以加深对Java字符串处理的理解,并能够灵活地解决实际编程问题。