不区分大小写的String split()方法

San*_*age 15 java string split

当我表演

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

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

但是当我这样做的时候

String test="23x34 ";
String[] array=test.split("X"); //splitting using capitalletter
Run Code Online (Sandbox Code Playgroud)

我在阵列23x34中得到了一个项目

那么有什么方法可以使用split方法作为不区分大小写或者是否有任何其他方法可以帮助?

njz*_*zk2 47

split正如文档所示,使用regexp.你的例子的正则表达式是:

"[xX]"
Run Code Online (Sandbox Code Playgroud)

此外,该(?i)标志切换不区分大小写.因此,以下也是正确的:

"(?i)x"
Run Code Online (Sandbox Code Playgroud)

在这种情况下,x可以正确逃脱任何litteral.

  • '(?i)`的+1,它可以用于句子.例如:`String [] array ="24xXx45".split("(?i)XXX"); // [24,45]` (3认同)
  • @ChanTzish这个问题是关于Java的 (3认同)
  • 如果您有 unicode 字符,您应该改用 (?iu) 标志。 (2认同)

har*_*rsh 16

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

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


jlo*_*rdo 8

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

String[] array = test.split("(?i)x"); // splits case insensitive
Run Code Online (Sandbox Code Playgroud)


Arv*_*ash 6

除了现有的答案之外,您还可以使用Pattern.CASE_INSENSITIVEflag 将正则表达式模式转换为不区分大小写的模式,您可以直接使用它来分割字符串,例如

String[] arr = Pattern.compile("x", Pattern.CASE_INSENSITIVE).split("23x34 ");
Run Code Online (Sandbox Code Playgroud)

演示:

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 ")));
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

[23, 34 ]
[23, 34 ]
Run Code Online (Sandbox Code Playgroud)


小智 5

我个人更喜欢使用

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

这样,只要您具有唯一的splitter值,就可以确保任何正则表达式都可以使用