【问题标题】:How to split the String without case-sensitive in java?如何在java中拆分不区分大小写的字符串?
【发布时间】:2020-08-12 07:56:09
【问题描述】:

java中如何拆分不区分大小写的字符串?

String sql = SELECT * FROM employee OFFSET 0 LIMIT 25;
String[] sqlWithoutPagination = sql.split("offset");

OFFSET可以在lower-case/upper-case中。

【问题讨论】:

  • x.toLowerCase().split("y")?
  • 查看this answer,在正则表达式中使用(?i) 标志。

标签: java string replace


【解决方案1】:

使用正则表达式如下所示

String sql = "SELECT * FROM employee OFFset 0 LIMIT 25";
System.out.println(sql.split("(?i)offset")[0]);

【讨论】:

    【解决方案2】:

    您不必使用 RegEx,只需使用 indexOftoLowerCase

    String sql = "SELECT * FROM employee OFFSET 0 LIMIT 25";
    int idx = sql.toLowerCase().indexOf("offset");
    String sqlWithoutPagination = sql.substring(0, idx);
    

    当然,您必须检查idx 是否大于等于 0。

    【讨论】:

      【解决方案3】:

      我实际上建议在不区分大小写的模式下使用String#replaceAll,以去掉OFFSETLIMIT 子句,如果它们发生的话:

      String sql1 = "SELECT * FROM employee OFFSET 0 LIMIT 25";
      String sql1New = sql1.replaceAll("(?i)(?:\\s+OFFSET \\d+)?\\s+LIMIT \\d+$", "");
      System.out.println(sql1 + "\n" + sql1New);
      String sql2 = "SELECT * FROM employee LIMIT 25";
      String sql2New = sql2.replaceAll("(?i)(?:\\s+OFFSET \\d+)?\\s+LIMIT \\d+$", "");
      System.out.println(sql2 + "\n" + sql2New);
      

      打印出来:

      SELECT * FROM employee OFFSET 0 LIMIT 25
      SELECT * FROM employee
      SELECT * FROM employee LIMIT 25
      SELECT * FROM employee
      

      【讨论】:

        猜你喜欢
        • 2016-01-26
        • 1970-01-01
        • 2020-06-05
        • 1970-01-01
        • 2022-11-22
        • 2016-09-04
        • 2011-06-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多