【问题标题】:Dividing a string into substring in JAVA在JAVA中将字符串划分为子字符串
【发布时间】:2010-05-28 06:51:09
【问题描述】:

根据我的项目,我需要将一个字符串分成两部分。

下面是例子:

String searchFilter = "(first=sam*)(last=joy*)";

searchFilter 是一个字符串。 我想把上面的字符串分成两部分

first=sam*last=joy* 这样我就可以根据我的要求再次将此变量拆分为first,sam*,lastjoy*

我没有太多的java实践经验。任何人都可以帮助我实现这一目标。这将非常有帮助。

提前致谢

【问题讨论】:

    标签: java substring


    【解决方案1】:

    最灵活的方法可能是使用正则表达式:

    import java.util.regex.*;
    
    public class Test {
        public static void main(String[] args) {
    
            // Create a regular expression pattern
            Pattern spec = Pattern.compile("\\((.*?)=(.*?)\\)");
    
            // Get a matcher for the searchFilter
            String searchFilter = "(first=sam*)(last=joy*)";
            Matcher m = spec.matcher(searchFilter);
    
            // While a "abc=xyz" pattern can be found...
            while (m.find())
                // ...print "abc" equals "xyz"
                System.out.println("\""+m.group(1)+"\" equals \""+m.group(2)+"\"");
        }
    }
    

    输出:

    "first" equals "sam*"
    "last" equals "joy*"
    

    【讨论】:

      【解决方案2】:

      看看String.split(..)String.substring(..),使用它们你应该能够实现你想要的。

      【讨论】:

        【解决方案3】:

        您可以使用splitsubstring 或使用StringTokenizer 来执行此操作。

        【讨论】:

          【解决方案4】:

          我有一个小代码可以解决你的问题

          StringTokenizer st = new StringTokenizer(searchFilter, "(||)||=");
                  while(st.hasMoreTokens()){
                      System.out.println(st.nextToken());
                  }
          

          它会给出你想要的结果。

          【讨论】:

            【解决方案5】:

            我认为你可以通过很多不同的方式做到这一点,这取决于你。 使用正则表达式或其他看https://docs.oracle.com/javase/1.5.0/docs/api/java/lang/String.html

            无论如何我建议:

            int separatorIndex = searchFilter.indexOf(")(");
            String filterFirst = searchFilter.substring(1,separatorIndex);
            String filterLast = searchFilter.substring(separatorIndex+1,searchFilter.length-1);
            

            【讨论】:

              【解决方案6】:

              这个(未经测试的sn-p)可以做到:

               String[] properties = searchFilter.replaceAll("(", "").split("\)");
               for (String property:properties) {
                 if (!property.equals("")) {
                    String[] parts = property.split("=");
                    // some method to store the filter properties
                    storeKeyValue(parts[0], parts[1]); 
                 }
               }
              

              背后的想法:首先我们去掉括号,替换左括号并使用右括号作为过滤器属性的分割点。生成的数组包括字符串{"first=sam*","last=joy*",""}(空字符串是一个猜测 - 不能在这里测试它)。然后对于每个属性,我们在“=”上再次拆分以获取键/值对。

              【讨论】:

              • 我所知道的所有 JVM 都将 property != "" 评估为 false(如上面的 sn-p 中所述)。
              • 正如我所说的 - 未经测试 - 我不确定第一个拆分是否将空字符串添加到数组中,因为字符串以“)”结尾。如果不是这种情况,则您提到的测试已过时。
              • 我的意思是它总是返回 false(在我熟悉的所有现代 JVM 上)。您需要改用equals(...)
              • 把它做成双份浓缩咖啡! :)
              猜你喜欢
              • 2012-11-06
              • 2014-09-26
              • 2015-06-06
              • 1970-01-01
              • 2013-08-27
              • 2011-04-15
              • 1970-01-01
              相关资源
              最近更新 更多