【问题标题】:Any Commons all substrings function?任何 Commons 所有子字符串功能?
【发布时间】:2011-03-06 00:38:18
【问题描述】:

我想知道是否有一个库函数(或者为什么 Apache Commons 中的 StringUtils 没有它?)对于字符串计算所有子字符串。 对于“abcde”,它返回“a”、“ab”、“b”、“abc”、“bc”、“c”、“abcd”、“bcd”、“cd”、“d”、“abcde”、 “bcde”、“cde”、“de”、“e”。

【问题讨论】:

    标签: java substring apache-commons code-reuse apache-stringutils


    【解决方案1】:

    我不相信有库函数,但是自己滚动一个非常容易:

    public ArrayList<String> getAllSubstrings(String s)
    {
       ArrayList<String> toReturn = new ArrayList<String>();
       for (int i = 0; i < s.length(); i++)
          for (int j = i + 1; j < s.length(); j++)
             toReturn.add(s.substring(i, j));
    }
    

    但请记住,会有许多排列等于 1+2+3+4+...+s.length

    【讨论】:

      【解决方案2】:

      我认为 AndyPerfect 不能正常工作。第二个循环绑定需要是

      public static ArrayList<String> getPowerSet(String original) {
             ArrayList<String> toReturn = new ArrayList<String>();
      
             toReturn.add("");
      
             for (int i = 0; i < original.length(); i++) {
                for (int j = i + 1; j <= original.length(); j++) {
                   toReturn.add(original.substring(i, j));
                }
             }
      
             return toReturn;
          }
      

      请注意,如果您不希望包含空子字符串,则可以删除第一个 add()。

      【讨论】:

      • 然而,Stephen C 在 2^N 上是对的。您需要记住空子字符串。如果您需要更多信息,可以查找电源组。
      • 不,他不是……他的心理证明有缺陷。
      • 没试过,但这个讨论证明实现它有错误的空间,它指的是一个可识别的问题(因此很常见?)==> StringUtils
      • 是的,在认为它不是 2^N 之后。我在想力量组而不是限制组。如果您使用它,您可能需要重命名该方法。
      【解决方案3】:

      听起来计算量很大。想想你对整个句子的所有排列。

      他们可能会想,如果有人需要一些不是定期需要的东西。

      【讨论】:

      • StringUtils 不适用于常规基础(String 是)。关键是因为它有一个简单的 id (allSubstrings(..)) 我希望 StringUtils 拥有它。 FileUtils 中的issues.apache.org/jira/browse/IO-261 也是如此。
      【解决方案4】:

      public static ArrayList getPowerSet(String original) { ArrayList toReturn = new ArrayList();

         toReturn.add("");
      
         for (int i = 0; i < original.length(); i++) {
            for (int j = i + 1; j <= original.length(); j++) {
               toReturn.add(original.substring(i, j));
            }
         }
      
         return toReturn;
      }
      

      【讨论】:

        【解决方案5】:
        public static ArrayList<String> getPowerSet(String original) {
               ArrayList<String> toReturn = new ArrayList<String>();
        
               toReturn.add("");
        
               for (int k = 0; k < original.length(); k++) {
                  for (int j = k + 1; j <= original.length(); j++) {
                     toReturn.add(original.substring(k, j));
                  }
               }
        
               return toReturn;
            }
        

        【讨论】:

          猜你喜欢
          • 2021-08-25
          • 1970-01-01
          • 1970-01-01
          • 2020-09-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多