【问题标题】:Obtaining the split value after java string splitjava字符串拆分后获取拆分值
【发布时间】:2018-09-24 10:03:13
【问题描述】:

我有一个动态生成的字符串。

我需要根据关系运算符拆分字符串。

为此我可以使用拆分功能。

现在我还想知道,根据上面提到的正则表达式,实际拆分的字符串是基于哪个关系运算符。

一个例子, 输入时

String sb = "FEES > 200";

申请

List<String> ls =  sb.split(">|>=|<|<=|<>|=");
System.out.println("Splitted Strings: "+s);

会给我结果,

Splitted strings: [FEES ,  200 ]

但期待结果:

Splitted strings: [FEES ,  200 ]
Splitted Relational Operator: >

【问题讨论】:

  • 您可以再次拆分String,然后将其拆分为空格。然后迭代并找到运算符,可能使用带有所有可能运算符Strings 的switch 语句。
  • 您可以将正则表达式与 Pattern.matches() 结合使用,将拆分运算符捕获到组中。

标签: java split


【解决方案1】:

您可以使用 3 个捕获组,第二组交替使用:

(.*?)(&gt;=|&lt;=|&lt;&gt;|&gt;|&lt;)(.*)

Regex demo

说明

  • (.*?) 匹配任意字符零次或多次非贪婪
  • (&gt;=|&lt;=|&lt;&gt;|&gt;|&lt;) 匹配 &gt;=&lt;=&lt;&gt;&gt;&lt;
  • (.*) 匹配任意字符零次或多次

例如:

String regex = "(.*?)(>=|<=|<>|>|<)(.*)";
String string = "FEES >= 200";            
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(string);
if(matcher.find()) {
    System.out.println("Splitted Relational Operator: " + matcher.group(2));
    System.out.println("Group 1: " + matcher.group(1) + " group 3: " + matcher.group(3));
}

Demo java

【讨论】:

    【解决方案2】:

    我建议使用正则表达式,在您的情况下更灵活。

    String sb = "FEES > 200";
    Pattern pat = Pattern.compile("(.*?)(>=|<=|<>|=|>|<)(.*)");
    Matcher mat = pat.matcher(sb);
    if (mat.find()) {
        System.out.println("Groups: " + mat.group(1) + ", " + mat.group(3));
        System.out.println("Operator: " + mat.group(2));
    }
    

    【讨论】:

    • (.*?)(&gt;=|&lt;=|&lt;&gt;|&gt;|&lt;)(.*) 改用这个正则表达式。
    • @SumeshTG 你是对的,我们需要从最长的开始,更新
    【解决方案3】:

    使用Pattern 执行此操作。

    String sb = "FEES > 200";
    Pattern pattern = Pattern.compile("(.*)(>|>=|<|<=|<>|=)(.*)");
    Matcher matcher = pattern.matcher(sb);
    if (matcher.find()) {
        System.out.println("Grouped params: " + matcher.group(1) + "," + matcher.group(3));
        System.out.println("Split operator: " + matcher.group(2));
    }
    

    请注意:

    • matcher.group(0) --> 所有字符串
    • matcher.group(1) --> 匹配的第一部分
    • matcher.group(2) --> 拆分运算符
    • matcher.group(3) --> 第二部分匹配

    【讨论】:

      【解决方案4】:

      您可以使用Pattern matcher 来匹配分隔符。示例如下 -

      public static int indexOf(Pattern pattern, String s) {
              Matcher matcher = pattern.matcher(s);
              return matcher.find() ? matcher.start() : -1;
          }
      
      
      public static void main(String[] args) {
          String sb = "FEES > 200";
          String[] s =  sb.split(">|>=|<|<=|<>|=");
          System.out.println("Splitted Strings: "+ s);
      
          int index = indexOf(Pattern.compile(">|>=|<|<=|<>|="), sb);
          System.out.println("del "+ sb.charAt(index));
      }
      

      【讨论】:

        【解决方案5】:

        如果你想从你的字符串中排除数字,你可以使用replaceAll()

        replaceAll("\d", ""); - 这将替换空白处的所有数字

        要删除不必要的单词,您需要提供更多信息。因为有不同的做事方式。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-01-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多