一道腾讯java笔试题
试题如下:
"|DF|A".split("|").length的结果是()
A 2 B 3 C 5 D 6
我知道String的split方法极容易出错,然而想不到的是这道题的答案竟然是D.
分析:
这道题的关键是String.split方法的参数是一个正则表达式字符串,split实际上调用的是:
public String[] split(String regex, int limit) {
return Pattern.compile(regex).split(this, limit);
}
而"|"这里不是简单的'|'字符,查阅Pattern类API就会知道:
"|"是正则表达式里的逻辑或运算符,它被编译后匹配的是其左右两边的任意一个字符串.举个例子来说
String[] arr = "a1b2cc1dd".split("1|2");//以1或者2分隔字符串
System.out.println(arr.length);
for(String s:arr){
System.out.println(s);
}
结果:
4
a
b
cc
dd
//以空串或者空串分隔字符串,实际上是分隔每一个字符
String[] arr = "a1b2cc1dd".split("|");
System.out.println(arr.length);
for(String s:arr){
System.out.println(s);
}
结果:
10
a
1
b
2
c
c
1
d
d
这道题到这里已经知道为什么要选择D了,但对于String.split方法我觉得更容易出问题的还在以下一些例子,请读者自己查看源码查找答案:
"|DF|A|||".split("[|]").length = 3
"||DF|A|||".split("[|]").length = 4
//关键看Pattern类源码
public String[] split(CharSequence input, int limit) {
int index = 0;
boolean matchLimited = limit > 0;
ArrayList matchList = new ArrayList();
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 (String[])matchList.subList(0, resultSize).toArray(result);
}
转自http://yu.an.jin.5.blog.163.com/blog/static/53155811201099115435386/
分享到:
相关推荐
### JAVA_split_用法详解 在Java编程语言中,`String`类提供了多个实用的方法来处理字符串,其中`split()`方法是用于将一个字符串分割成字符串数组的一种常见方式。此方法利用正则表达式(Regular Expression)作为...
文件目录转json格式
Java 中 Split 的用法及注意 Java 中的 Split 方法是通过正则表达式来拆分字符串的,它可以将一个字符串分割为子字符串,然后将结果作为字符串数组返回。该方法的语法为 `stringObj.split(regex, [limit])`,其中 `...
`split()`方法位于`java.lang.String`类中,它的基本语法如下: ```java public String[] split(String regex) ``` 这里的`regex`参数是一个正则表达式,用于定义分隔字符串的规则。正则表达式是一种强大的文本...
### Java中的split方法详解 #### 一、引言 在Java编程中,字符串处理是非常常见的需求之一。`String`类提供了多种方法来处理字符串,其中`split`方法因其灵活性和强大的分割功能而被广泛使用。本文将深入探讨`...
`split`函数是Java中用于字符串分割的关键方法,它接受一个正则表达式作为参数,返回一个字符串数组,其中每个元素都是原字符串根据正则表达式分割后的结果。在这个文件分割程序中,`split`可能不是直接用于字符串...
java split()方法实用案例
Java split() 函数使用方法解析 Java split() 函数是 Java 编程语言中一个非常常用的字符串分割函数,它可以将一个字符串按照指定的分隔符分割成多个子字符串,并将其存储在一个字符串数组中。下面我们将详细介绍 ...
在Java编程语言中,`String`类提供了许多用于操作字符串的方法,其中之一便是`split`方法。这个方法在处理文本数据时极为有用,特别是在需要根据特定的分隔符将字符串分割成多个子串的情况下。下面,我们将深入探讨`...
Java中的`split()`方法是String类的一个非常重要的成员函数,用于根据给定的正则表达式将一个字符串分割成多个子字符串,并返回一个字符串数组。这个方法在处理文本数据、解析配置文件或从复杂的字符串中提取信息时...
String[] parts = amount.split("\\."); String integerPart = parts[0]; String decimalPart = parts.length > 1 ? parts[1] : ""; StringBuilder result = new StringBuilder(); for (int i = integerPart....
在Java编程中,将数字转换为金额格式是一项常见的任务,特别是在财务系统或者电子商务应用中。这个过程涉及到将数字转换成符合人类阅读习惯的货币格式,包括添加逗号分隔符,处理负数,以及在必要时添加前导零。本文...
Java中的多音字转拼音是一项常见的任务,尤其是在处理中文文本时。多音字是指一个汉字有多个读音,根据不同的语境和组合可以有不同的发音。例如,“还”字就有“hái”和“huán”两种读音。在自然语言处理、语音...
标题提到的"split this is a split java develop utils package"很可能是指一个专门处理字符串分隔的Java工具包。这个包可能包含了用于解析、拆分和操作字符串的实用方法,对于日常开发工作非常有用。 描述中的...
#### 三、Java方法实现:简写转全写及全写转简写 ##### 1. 将非简写的IPv6转换成简写的IPv6 ```java public static String parseFullIPv6ToAbbreviation(String fullIPv6) { // 初始化返回结果 String ...
Java中的`String.split()`方法是处理字符串的强大工具,它能够根据指定的分隔符将一个字符串分割成多个子字符串,并将这些子字符串存储在一个数组中。这个方法在处理文本数据时非常常见,尤其是在解析CSV格式的数据...
在Java编程中,将金额的阿拉伯数字转换为中文汉字大写是常见的财务处理需求,主要用于防止数字篡改,增加财务数据的安全性和准确性。这个过程通常称为金额数字化,它涉及到将小数点、整数和小数部分分别转换,并且...
在进行map计算之前,mapreduce会根据输入文件计算输入分片(input split),每个输入分片(input split)针对一个map任务,输入分片(input split)存储的并非数据本身,而是一个分片长度和一个记录数据的位置的数组...
在Java编程语言中,`split()` 是一个非常实用的字符串方法,它允许我们将字符串按照指定的分隔符进行拆分。然而,在某些情况下,当分隔符是空格或者制表符(\t),并且字符串末尾有连续的空格或制表符时,`split()` ...
在Python中,`split()`函数是内置的字符串方法,而在其他语言如C++或Java中,可能需要通过特定的库函数或自定义方法来实现类似功能。在Python的例子中,`split(separator)`接受一个参数,即作为分隔符的字符串,返回...