首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在所有可能的情况下递增java字符串?

如何在所有可能的情况下递增java字符串?
EN

Stack Overflow用户
提问于 2008-12-04 21:02:24
回答 13查看 43.2K关注 0票数 18

我需要在java中增加一个字符串,从"aaaaaaba“到"aaaaaab”再到"aaaaaac“直到字母表,最后是”aaaaaaba“到"aaaaaabb”,依此类推。

这有什么窍门吗?

EN

回答 13

Stack Overflow用户

回答已采纳

发布于 2008-12-04 21:15:56

这不是什么“把戏”,但这对4个字符的字符串有效。显然,对于更长的字符串,它会变得更丑陋,但想法是相同的。

代码语言:javascript
复制
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);
      }
    }
  }
}
票数 -3
EN

Stack Overflow用户

发布于 2008-12-04 21:15:02

您基本上是在实现一个带有前导“零”("a")的Base 26 number system

这与将int转换为基数为2或基数为10的字符串的方法相同,但不是使用2或10,而是使用26,而不是'0‘作为基数,而是使用'a’。

在Java中,您可以很容易地使用以下代码:

代码语言:javascript
复制
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、int或long,取决于您的要求),并根据需要将其转换为字符串。这样,您可以轻松地增加/减少/修改您的计数器,而不必解析和重新创建字符串。

票数 55
EN

Stack Overflow用户

发布于 2010-02-26 07:25:16

下面的代码使用递归方法来获取下一个字符串(假设从"aaaa“到"aaab”等等),而不需要生成前面的所有组合,因此它相当快,并且不限于给定的最大字符串长度。

代码语言:javascript
复制
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;
 }
}

正如一些人指出的那样,这是尾递归,所以你可以用循环来代替递归。

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/342052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档