不区分大小写的字符串分割()方法

23

当我执行时

String test="23x34 ";
String[] array=test.split("x"); //splitting using simple letter

我的数组中有两个项分别为23和34

但是当我执行以下操作时:

String test="23x34 ";
String[] array=test.split("X"); //splitting using capitalletter

我在23x34的数组中找到了一个项目。

那么是否有办法使用不区分大小写的split方法,或者是否有其他可以帮助的方法?

9个回答

58

split 方法中,正如官方文档所述,使用了一个正则表达式。对于你的示例来说,可以使用以下正则表达式:

"[xX]"

另外,(?i) 标志可以切换大小写不敏感性。因此,以下写法也是正确的:

"(?i)x"

在这种情况下,x可以是任何已经正确转义的文字。

6
+1 表示忽略大小写,在句子中也可以使用。例如:String[] array = "24xXx45".split("(?i)XXX"); // [24, 45] - Fernando Leal
2
如果你有Unicode字符,最好使用(?iu)标志。 - NikolaB
3
@ChanTzish 这个问题是关于Java的。 - njzk2
1
太棒了!提到(?i)真是个宝藏。处理所有大小写敏感的情况。虽然这应该是一个完全令人满意的解决方案,但这应该被接受为答案。 - sud007

19

使用正则表达式模式[xX]来进行split

String x = "24X45";
String[] res = x.split("[xX]");
System.out.println(Arrays.toString(res));

13

你也可以在正则表达式中使用嵌入式标志:

String[] array = test.split("(?i)x"); // splits case insensitive

6

我个人更喜欢使用

String modified = Pattern.compile("x", Pattern.CASE_INSENSITIVE).matcher(stringContents).replaceAll(splitterValue);
String[] parts = modified.split(splitterValue);

以此方式,只要您拥有唯一的分隔符,即可确保任何正则表达式都能正常工作。

6
除了现有的答案外,您还可以使用Pattern.CASE_INSENSITIVE标志将正则表达式模式转换为不区分大小写模式,您可以直接使用它来拆分字符串,例如:
String[] arr = Pattern.compile("x", Pattern.CASE_INSENSITIVE).split("23x34 ");

演示:

import java.util.Arrays;
import java.util.regex.Pattern;

public class Main {
    public static void main(String[] args) {
        Pattern pattern = Pattern.compile("x", Pattern.CASE_INSENSITIVE);
        
        System.out.println(Arrays.toString(pattern.split("23x34 ")));
        System.out.println(Arrays.toString(pattern.split("23X34 ")));
    }
}

输出:

[23, 34 ]
[23, 34 ]

0

@WChargin 太正确了。而我昨天才意识到这一点。 - zEro

0

对于JavaScript:

var test="23x34 ";
var array = test.split(\x\i);

好的,这很烦人:在谷歌搜索“不区分大小写的拆分Java脚本”时,这个问题显示在顶部,然而这个答案是唯一提到JavaScript的(所以我花了一段时间才意识到问题 - 和其他答案 - 都是特定于Java的),但更糟糕的是,这个答案是错误的,在JavaScript中也无法工作(错误=“无效的转义序列”)......标记此答案进行删除,因为它与问题无关且无论如何都是错误的,因此浪费了人们的时间。 - ashleedawg

0

这个实现有点复杂,但是下面是具体步骤:

  1. 将两个字符串(整体文本和搜索词)都转换为小写
  2. 运行 text.split(searchTerm)
  3. 这会给你一个由非搜索词组成的字符串数组
  4. 通过遍历这个数组,你可以得到每个字符串的长度
  5. 在这些字符串之间,必须有一个已知长度的搜索词
  6. 通过计算索引,你现在可以从原始字符串中 .slice() 出这些部分

-1
你可以将正则表达式作为参数传递给 split 方法,像这样:
"32x23".split("[xX]");

或者你可以使用一个 StringTokenizer,它允许你设置分隔符集合,像这样:

StringTokenizer st = new StringTokenizer("32x23","xX");
//                                          ^^    ^^
//                                       string delimiter

这样做的好处是,如果您想以编程方式构建分隔符列表,例如对于分隔符列表中的每个小写字母添加其大写对应项,您可以这样做,然后将结果传递给 StringTokenizer


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接