Есть ли в Commons все подстроки функции? - PullRequest
0 голосов
/ 06 марта 2011

Мне интересно, есть ли библиотечная функция (или почему в StringUtils в Apache Commons ее нет?), Которая для String вычисляет все подстроки.Для «abcde» он повторяет «a», «ab», «b», «abc», «bc», «c», «abcd», «bcd», «cd», «d», «abcde»,"bcde", "cde", "de", "e".

Ответы [ 5 ]

3 голосов
/ 06 марта 2011

Я не верю, что есть библиотечная функция, но было бы очень легко просто свернуть одну из них:

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 голос
/ 06 марта 2011

Я не думаю, что AndyPerfect будет работать правильно.Граница второго цикла должна быть <= вместо просто <. </p>

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 (), если не хотите включать пустую подстроку.

0 голосов
/ 19 февраля 2014
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;
    }
0 голосов
/ 19 февраля 2014

открытый статический 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;
}
0 голосов
/ 06 марта 2011

Звучит вычислительно интенсивно. Подумайте обо всех перестановках, которые вы бы имели с целыми предложениями.

Это, и они, вероятно, решили, что кому-то нужно что-то, что не нужно на регулярной основе.

...