背景:
String字符串是在Java中用的最多的一个数据类型,关于split的操作也是很频繁的。
遇到一个问题,就是当我用String.split方法的时候,当我的字符串是空的时候,不管split是用的哪个字符串,都会返回一个含有一个空字符串的String数组。
System.out.println("String length: " + "".split(",").length);
System.out.println("String lengthaa: " + "aa".split(",").length);
System.out.println("String lengthaa,: " + "aa,".split(",").length);
Result:
String length: 1
String lengthaa: 1
String lengthaa,: 1
分析:
很是奇怪就去看了jdk docs。
引用
This method works as if by invoking the two-argument split method with the given expression and a limit argument of zero. Trailing empty strings are therefore not included in the resulting array.
就是说spilt(String regex)这个方法是通过调用另外一个有两个参数的split方法起作用的,两个参数里:一个是传入的regex;另一个就是值为0的limit。紧跟在尾部的空字符串字符串将不会出现在数组的结果中。
还有这部分:
引用
String[] java.lang.String.split(String regex, int limit)
Splits this string around matches of the given regular expression.
The array returned by this method contains each substring of this string that is terminated by another substring that matches the given expression or is terminated by the end of the string. The substrings in the array are in the order in which they occur in this string. If the expression does not match any part of the input then the resulting array has just one element, namely this string.
The limit parameter controls the number of times the pattern is applied and therefore affects the length of the resulting array. If the limit n is greater than zero then the pattern will be applied at most n - 1 times, the array's length will be no greater than n, and the array's last entry will contain all input beyond the last matched delimiter. If n is non-positive then the pattern will be applied as many times as possible and the array can have any length. If n is zero then the pattern will be applied as many times as possible, the array can have any length, and trailing empty strings will be discarded.
If the expression does not match any part of the input then the resulting array has just one element, namely this string这句话,解读了我最开始的疑问。也就是说,如果没有匹配到的话,就把String字符串本身作为一个element放到数组中去。也就是上文中,得到的值是:
for(String a:"".split(",")) System.out.println("String length1: " + a);
for(String a:"aa".split(",")) System.out.println("String length2: " + a);
for(String a:"aa,".split(",")) System.out.println("String length3: " + a);
Result
String length1:
String length2: aa
String length3: aa
这里为什么第二个和第三个是一样的结果呢:因为:
引用
If n is zero then the pattern will be applied as many times as possible, the array can have any length, and trailing empty strings will be discarded
也就是说原来"aa,"字符串split出来的是两个的,但是由于第二个值是空字符串"",后面又没有跟什么其他的值,那么最后的empty string 将会被丢弃。
但是如果最后面还有一个“ ”white space的话就不会被留下。
例如:
System.out.println("String lengthaa,: " + "aa, ".split(",").length);
for(String a:"aa, ".split(",")) System.out.println("String length3: " + a);
Result:
String lengthaa,: 2
String length3: aa
String length3:
这样子好理解了吧。
也就是说即使是这样的"aa,,,,,,,"一个字符串,结果还是就一个值aa。 大家可以去测试看看。
解答:
最后这里有一道题目:
引用
Consider the following program and predict the output:
class Test {
public static void main(String args[]) {
String test = "I am preparing for OCPJP";
String[] tokens = test.split("\\S");
System.out.println(tokens.length);
}
}
a) 0
b) 5
c) 12
d) 16
那么请问,答案是哪个呢?
答案就是QRCODE
----EOF----
- 大小: 435 Bytes
分享到:
相关推荐
在C++编程中,`std::string`是一个非常重要的数据类型,用于表示和操作字符串。本文将详细解析两种常用的C++ `std::string`截取字符串的方法:`find`和`find_last_of`,以及如何结合使用它们来满足各种字符串处理...
基于Keil实现字符串函数string.h的简单应用基于Keil实现字符串函数string.h的简单应用基于Keil实现字符串函数string.h的简单应用基于Keil实现字符串函数string.h的简单应用基于Keil实现字符串函数string.h的简单应用...
在这个“C++实现的String字符串类”中,我们将探讨类的设计、重载操作符、内存管理以及类的组合。 首先,一个自定义的`String`类通常会包含以下几个核心部分: 1. **数据成员**:存储字符串的实际字符序列,通常是...
C++课程设计之string字符串类 C++课程设计之string字符串类是C++程序设计中的一部分,主要是通过定义字符串类来实现对字符串的赋值、连接、复制、查找、交换操作。下面是相关的知识点: 一、字符串类的定义 在C++...
标题和描述中提到的问题,即“将含有大写字母的string字符串转为全小写字母”,是字符串处理中的一个基本操作,常见于数据清洗、文本分析或者用户输入的规范化等场景。下面我们将详细探讨这个问题,并给出具体的解决...
Base64转String字符串,支持将Base64转化为String字符串
C#中可以使用`string.Join()`方法将字符串数组合并成一个单一的字符串。例如: ```csharp string[] strArray = {"Hello", "World"}; string result = string.Join(" ", strArray); ``` 这里的`" "`是分隔符,...
例如,我们有一个字符串`str = "Hello, World!"`,如果我们想要删除逗号及后面的字符,可以这样做: ```csharp string str = "Hello, World!"; int startIndex = str.IndexOf(","); string newStr = str.Remove...
在C语言中,String字符串是字符数组的一种表现形式,它以空字符'\0'作为结束标志。本项目名为"C语言实现String字符串及其函数stringUtil",主要关注的是如何在C语言环境中自定义处理字符串的函数,以扩展标准库中...
- `split(String regex)`:根据给定的正则表达式将字符串分割成多个子字符串,并返回一个包含这些子字符串的数组。 ### 示例代码 ```java public class TestJavaDemo01 { public static void main(String[] args)...
在编程领域,字符串(String)是数据处理的基本元素之一,经常需要进行拆分操作。当我们处理包含多个信息片段的字符串时,比如以特定分隔符连接的数据,就需要使用字符串的拆分方法来获取各个部分。本篇文章将深入探讨...
在上述代码中,`XML.toJSONObject(String xml)`方法接收一个XML字符串并返回一个`JSONObject`。这个方法会解析XML,保留其原有的层次结构,并将XML元素转换为JSON键值对。转换后的JSON字符串可以通过`toString()`...
假设我们有一个较长的字符串,但只关心其中的一部分,比如从第3个字符开始的4个字符: ```scl STRING LongString := "ABCDEFGHIJ"; STRING SubString; SubString := SUBSTRING(LongString, 2, 4); // 从索引2开始,...
标题提到的“C#中在一个字符串中删除另一个字符或字符串”涉及到的关键知识点主要包括字符串操作、字符数组、字符串替换以及正则表达式。以下将详细讲解这些知识点。 首先,C#中的字符串(`string`)是不可变的,这...
- `compareTo(String)`根据字典顺序比较字符串,返回值为整数,表示当前字符串与另一个字符串的相对顺序。 - `compareToIgnoreCase(String)`同样进行比较,但忽略大小写。 9. **字符串操作方法**: - `substring...
305-字符串函数string.h应用举例(51单片机C语言实例Proteus仿真和代码)305-字符串函数string.h应用举例(51单片机C语言实例Proteus仿真和代码)305-字符串函数string.h应用举例(51单片机C语言实例Proteus仿真和代码)...
本例中的目标是编写一个名为`stringLower()`的函数,它接受一个包含大写字母的字符串,并将其所有大写字母转换为小写字母。这个功能在处理用户输入、数据清理或格式化输出时非常有用。下面我们将详细讨论如何实现这...
在C#中,处理字符串时,我们经常需要从一个较大的字符串中提取出特定部分,比如位于两个已知字符串之间的子串。这在解析日志、处理配置文件或者从HTML源码中提取信息时非常常见。标题中的“字符串提取(获取两个字符...
必须实现如下操作,字符串比较、求串的长度、判断串是否为空、将串置空、字符串赋值(包括两个字符串类复制,一个字符串赋值到CmyString对象)、求字符串中的一个字符或改变字符串中的一个字符(采用重载[]),完成...
`char str[80]`定义了一个能存储最多79个字符的数组,用于存储用户输入的字符串。字符串的结束符是`\0`,它不在字符计数之内,因此,`str[79]`可以存放最后一个字符,而`str[80]`则用于存储这个结束符。 3. **函数...