当前位置:  开发笔记 > 编程语言 > 正文

如何通过所有可能性增加java String?

如何解决《如何通过所有可能性增加javaString?》经验,为你挑选了2个好方法。

我需要将java中的String从"aaaaaaaa"增加到"aaaaaab"到"aaaaaac"直到字母表,然后最终到"aaaaaaba"到"aaaaaabb"等.

这有诀窍吗?



1> Joachim Saue..:

你基本上实现了一个带有前导"零"("a")的Base 26号码系统.

你可以像将int转换为base-2或base-10字符串一样,但是使用26而不是'0'作为基础,而不是使用2或10,你使用'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();
}

那么基本的想法是不存储String,而只是存储一些计数器(int一个int或一个long,取决于你的要求)并根据需要将它转换为String.这样,您可以轻松地增加/减少/修改计数器,而无需解析和重新创建字符串.



2> cyberz..:

下面的代码使用递归方法来获取下一个字符串(比方说,从"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;
 }
}

推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有