如何通过所有可能性增加一个Java String?

我需要通过字母表将Java中的字符串从“aaaaaaaa”增加到“aaaaaab”到“aaaaaac”,然后最终到“aaaaaaba”到“aaaaaabb”等。

这有什么窍门吗?


这不是什么“窍门”,但这适用于4字符串。 显然它对于更长的字符串会变得更丑,但这个想法是一样的。

char array[] = new char[4];
for (char c0 = 'a'; c0 <= 'z'; c0++) {
  array[0] = c0;
  for (char c1 = 'a'; c1 <= 'z'; c1++) {
    array[1] = c1;
    for (char c2 = 'a'; c2 <= 'z'; c2++) {
      array[2] = c2;
      for (char c3 = 'a'; c3 <= 'z'; c3++) {
        array[3] = c3;
        String s = new String(array);
        System.out.println(s);
      }
    }
  }
}

你基本上实现了带有“零”(“a”)的Base 26数字系统。

你这样做的方式与将int转换为base-2或base-10字符串的方式相同,但不是使用2或10,而是使用26而不是'0'作为基础,则使用'a'。

在Java中,你可以很容易地使用这个:

public static String base26(int num) {
  if (num < 0) {
    throw new IllegalArgumentException("Only positive numbers are supported");
  }
  StringBuilder s = new StringBuilder("aaaaaaa");
  for (int pos = 6; pos >= 0 && num > 0 ; pos--) {
    char digit = (char) ('a' + num % 26);
    s.setCharAt(pos, digit);
    num = num / 26;
  }
  return s.toString();
}

然后,基本的想法是不存储字符串,但只是一些计数器(根据您的要求int整数或长整数),并根据需要将其转换为字符串。 通过这种方式,您可以轻松地增加/减少/修改计数器,而无需解析和重新创建字符串。


下面的代码使用递归方法来获取下一个字符串(比如说,从“aaaa”到“aaab”等等),而不需要生成所有以前的组合,所以它非常快速并且不限于给定的最大值字符串长度。

public class StringInc {
 public static void main(String[] args) {
   System.out.println(next("aaa")); // Prints aab

   System.out.println(next("abcdzz")); // Prints abceaa

   System.out.println(next("zzz")); // Prints aaaa
 }

 public static String next(String s) {
   int length = s.length();
   char c = s.charAt(length - 1);

   if(c == 'z')
     return length > 1 ? next(s.substring(0, length - 1)) + 'a' : "aa";

   return s.substring(0, length - 1) + ++c;
 }
}
链接地址: http://www.djcxy.com/p/80465.html

上一篇: How to increment a java String through all the possibilities?

下一篇: Another Coder Confused by Recursion