我需要将java中的String从"aaaaaaaa"增加到"aaaaaab"到"aaaaaac"直到字母表,然后最终到"aaaaaaba"到"aaaaaabb"等.
这有诀窍吗?
Joa*_*uer 54
你基本上实现了一个带有前导"零"("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();
}
Run Code Online (Sandbox Code Playgroud)
那么基本的想法是不存储String,而只是存储一些计数器(int一个int或一个long,取决于你的要求)并根据需要将它转换为String.这样,您可以轻松地增加/减少/修改计数器,而无需解析和重新创建字符串.
cyb*_*erz 13
下面的代码使用递归方法来获取下一个字符串(比方说,从"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;
}
}
Run Code Online (Sandbox Code Playgroud)
Cla*_*ton -3
这不是什么“技巧”,但这适用于 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);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
37625 次 |
| 最近记录: |