【问题标题】:Case insensitive String split() method不区分大小写的 String split() 方法
【发布时间】:2013-05-11 00:34:51
【问题描述】:

当我表演时

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 方法作为不区分大小写的方法,或者是否有其他方法可以提供帮助?

【问题讨论】:

    标签: java string split


    【解决方案1】:

    除了现有的答案之外,您还可以使用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 ]
    

    【讨论】:

      【解决方案2】:

      这有点复杂,但它是如何实现的:

      1. 两个字符串都小写(整体文本和搜索词)
      2. 运行text.split(searchTerm)
      3. 这为您提供了一个不是搜索词的字符串数组
      4. 通过遍历这个数组,您可以获得每个字符串的长度
      5. 在每个字符串之间,必须有一个搜索词(已知长度)
      6. 通过计算索引,您现在可以 .slice() 原始字符串中的片段

      【讨论】:

        【解决方案3】:

        对于 JavaScript:

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

        【讨论】:

        • 好吧,这很烦人:这个问题显示在谷歌搜索“不区分大小写的 Java 脚本”的顶部,但这个答案是唯一提到 JavaScript(所以我花了一段时间才意识到这个问题 - 以及其他答案 - 都是特定于 Java 的),但最重要的是,这个答案是 incorrect 并且无论如何在 JavaScript 中都不起作用( error="invalid escape sequence")..... 将此答案标记为删除,因为它与问题无关并且无论如何都不正确,因此浪费人们的时间。
        【解决方案4】:

        我个人更喜欢使用

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

        通过这种方式,您可以确保任何正则表达式都可以工作,只要您有唯一的拆分器值

        【讨论】:

          【解决方案5】:

          您可以使用正则表达式作为split 的参数,如下所示:

          "32x23".split("[xX]");
          

          或者您可以使用 StringTokenizer 来设置其分隔符集,如下所示:

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

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

          【讨论】:

            【解决方案6】:

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

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

            【讨论】:

              【解决方案7】:

              split 如文档所示,使用正则表达式。您的示例的正则表达式是:

              "[xX]"
              

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

              "(?i)x"
              

              在这种情况下,x 可以是任何正确转义的垃圾。

              【讨论】:

              • +1 表示(?i),可用于句子。例如:String[] array = "24xXx45".split("(?i)XXX"); // [24, 45]
              • 如果你有 unicode 字符,你应该使用 (?iu) 标志。
              • @ChanTzish 这个问题是关于 Java 的
              • 太棒了!提到(?i) 真的是一个瑰宝。处理所有区分大小写的场景。不过,这应该是公认的答案,作为一个完全令人满意的解决方案。
              【解决方案8】:

              Java 的 String 类的 split 方法也接受正则表达式。

              为了简短起见,这应该对您有所帮助:http://www.coderanch.com/t/480781/java/java/String-split

              【讨论】:

              • @WChargin 如此真实。我昨天才意识到。
              【解决方案9】:

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

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

              【讨论】:

                猜你喜欢
                • 2012-06-29
                • 2013-08-05
                • 1970-01-01
                • 1970-01-01
                • 2019-10-04
                • 1970-01-01
                • 2011-02-09
                • 2012-12-01
                • 2013-03-06
                相关资源
                最近更新 更多