先看下面的代码
String test="www.baidu.com";
String[] result=test.split(".");
System.out.println(Arrays.toString(result));
初一看,输出结果肯定是[www,baidu,com]
但是,实际上的输出结果却是[],Why?
仔细查看一下String的API说明就可以发现split(String regex),奥秘就在这里,split使用正则表达式作为参数,而"."在正则表达式中表示任意字符,因此最后没有任何结果也就可以相见了。
类似的String的API还有matches,replaceAll,replaceFirst。
在String的API中,还有一对很奇怪的API:replace和replaceAll,只从名字看,replaceAll是replace的复数形式,但实际上二者都是用于替换字符串中所有匹配的字符串,只不过replace用普通字符串作参数,而replaceAll用正则表达式作参数
//split使用的是正则表达式作为参数
String test="www.baidu.com";
String temp1=test.replace(".", "\\");//这里的\\是用于转义\符号
//第一个正则表达式参数中,\\.将会被转义成\.
//第二个实际上是前两个\\用于生成转义用的\,而后两条用于生成字符\
String temp2=test.replaceAll("\\.", "\\\\");
System.out.println("replace的结果:"+temp1);
System.out.println("replaceAll的结果:"+temp2);
上面的代码,temp1和temp2的值是相同的
在temp2的实现过程中为什么用了4个\而不是temp1的2个\呢,这是因为虽然replace、replaceAll在底层都是通过Matcher类的replaceAll函数实现的,但是replace在调用之前调用过toString,将转义过程提前了,而replaceAll实际上是在Matcher类实现replaceAll的过程中才进行转义字符的处理。在Matcher的实现中如下:第16行程序中,读到"\\"时,自动向下扫描,如果只有2个\,将会出现StringIndexOutOfBoundsException异常
public Matcher appendReplacement(StringBuffer sb, String replacement) {
// If no match, return error
if (first < 0)
throw new IllegalStateException("No match available");
// Process substitution string to replace group references with groups
int cursor = 0;
String s = replacement;
StringBuffer result = new StringBuffer();
while (cursor < replacement.length()) {
char nextChar = replacement.charAt(cursor);
if (nextChar == '\\') {
cursor++;
nextChar = replacement.charAt(cursor);
result.append(nextChar);
cursor++;
} else if (nextChar == '$') {
// Skip past $
cursor++;
// The first number is always a group
int refNum = (int)replacement.charAt(cursor) - '0';
if ((refNum < 0)||(refNum > 9))
throw new IllegalArgumentException(
"Illegal group reference");
cursor++;
// Capture the largest legal group string
boolean done = false;
while (!done) {
if (cursor >= replacement.length()) {
break;
}
int nextDigit = replacement.charAt(cursor) - '0';
if ((nextDigit < 0)||(nextDigit > 9)) { // not a number
break;
}
int newRefNum = (refNum * 10) + nextDigit;
if (groupCount() < newRefNum) {
done = true;
} else {
refNum = newRefNum;
cursor++;
}
}
// Append group
if (group(refNum) != null)
result.append(group(refNum));
} else {
result.append(nextChar);
cursor++;
}
}
分享到:
相关推荐
在Java编程语言中,分割字符串是一项常见的操作,它允许我们将一个长字符串分解成多个子字符串,每个子字符串对应原字符串中的某个部分。这通常通过使用`split()`方法来实现,该方法是Java `String`类的一个成员。在...
### Java中截取带汉字的字符串 在Java编程语言中,处理包含中文字符的字符串时,经常遇到的一个问题是如何正确地截取这些字符串。如果直接按照字节(byte)来进行分割,很容易导致中文字符被截断一半,从而形成乱码。...
在这个例子中,逗号(",")是分隔符,`split(",")`将原始字符串按照逗号切割成了六个子字符串,并将它们存储在列表中。 在Java中,我们使用`String`类的`split()`方法。与Python类似,它也接收一个分隔符作为参数,...
这个方法用来处理java中可能有一些特别的需要,一大串中英文混合,需要中间截断或是中英中间添加一些特别的标识,调用这个方法 第一个参数是要处理的字符串,第二个是要在中英字符中间插入的字符。调用就可以得到想...
`split()` 方法是字符串分隔的核心,它通常用于将一个字符串按照特定的分隔符切割成多个子字符串。例如,`split(",")` 可以将逗号分隔的字符串转换为字符串数组。 2. **插入字符串**: `insert()` 方法允许你在...
在Python中,你可以使用`split()`函数来分割字符串。例如,如果你有一个字符串`str = "Hello,World,How,Are,You"`,并想以逗号为分隔符,你可以这样操作: ```python split_str = str.split(",") ``` 这将会返回一...
在Java编程语言中,字符串处理是一项至关重要的任务,无论是在简单的数据操作,还是在复杂的文本分析和处理场景中。本文将深入探讨Java中处理中英文字符串的基本操作,包括子串的提取、比较、拼接、替换以及一些常用...
字符串分割是将一个长字符串依据特定的分隔符切割成多个子字符串的操作。在不同的编程语言中,这个过程有不同的实现方式。 在C语言中,`strtok()` 函数是用于分割字符串的标准库函数。例如,如果你有一个以空格分隔...
例如,`split()`方法是`String`类的一个成员,它可以将字符串按照指定的分隔符切割成一个字符数组。而数组的元素也可以转换成字符串,通过`toString()`方法,虽然默认的转换可能不会满足所有需求,这时我们可以使用`...
此问题需要对字符串进行切分,这可能涉及到`String`类的方法,如`substring()`,`split()`等。 2. **数组操作**:数组是Java中存储固定数量相同类型元素的数据结构。在此问题中,我们需要处理一个字符串数组,可能...
3. **切割与分割**:使用`split()`方法按照特定分隔符将字符串拆分为多个子字符串数组。 4. **大小写转换**:`toUpperCase()`和`toLowerCase()`用于转换字符串的大小写。 5. **格式化输出**:`printf()`或`format()`...
Java中,我们使用`String`类的`split()`方法来拆分字符串。这个方法接受一个正则表达式作为参数,例如: ```java String str = "apple|banana|grape"; String[] fruits = str.split("|"); for (String fruit : ...
本篇内容主要探讨了两种常见的Java字符串转列表的方法:使用`split()`函数和Java 8的Stream API。 1. **字符串分割**: - 字符串分割的概念是指根据特定的分隔符将一个字符串切割成多个子字符串,生成一个字符串...
在这个例子中,`split(" ")`会找到所有空格并以此为界将字符串切分为多个部分,返回一个包含这些部分的列表。如果要以逗号为分隔符,只需将参数改为","即可。 除了Python,其他编程语言也有类似的功能。在Java中,...
字符串拆分是指将一个长字符串依据特定的分隔符切割成多个子字符串。这一操作在处理文本数据时十分常见,例如解析日志文件、处理用户输入等。在Python中,可以使用split()方法,指定分隔符后,它会返回一个包含所有...
这个函数使用一个循环结构,通过`INSTR`找到分隔符的位置,然后切割字符串并将每个部分添加到`T_VARRAY`类型的变量`CSTR`中。 ```sql CREATE OR REPLACE TYPE LW.T_VARRAY IS TABLE OF VARCHAR2(200); CREATE OR ...
- `split(separator[, limit])`根据分隔符切割字符串成数组。 6. 字符串遍历: 使用`for...of`循环或`Array.from()`可以遍历字符串中的每个字符。例如: ```javascript for (let char of "Hello") { console....
在Java编程语言中,处理字符串切割常常涉及到对文件路径或URL等复杂字符串的解析。特别是在处理IE浏览器上传文件时,由于IE会将整个文件路径作为文件名上传,我们需要使用特定的方法来提取出真正的文件名。这里我们...
在分割字符串时,我们会指定这个分隔符,函数会根据它将字符串切割成多个部分。 在Python中,`str.split()`函数是最常见的字符串分割方法。例如,如果我们有一个字符串`"apple/banana/cherry"`,我们可以使用`split...
- `String[] split(String regex)`:Java的`split(String regex)`同样用于切割字符串,返回数组。 7. **字符串比较**: - `str1 == str2`:Python中,用`==`比较字符串内容是否相同。 - `str1.equals(str2)`:...