任何Commons所有子串都起作用?

时间:2011-03-06 00:38:18

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

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

5 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

我不认为AndyPerfect会正常工作。第二个循环绑定需要&lt; =而不仅仅是&lt;。

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()。

答案 2 :(得分:0)

听起来很耗费精力。想想你对整个句子的所有排列。

那他们可能会想到是否有人需要定期不需要的东西。

答案 3 :(得分:0)

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;
}

答案 4 :(得分:0)

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;
    }