我有两个字符串plainText和key.现在,如果plainText.length > key.length那时我必须重复该键,直到它的长度相同plainText.这是一个例子:
plainText = "helloworld"
key="foobar"
Run Code Online (Sandbox Code Playgroud)
因此关键应该增加到"foobarfoob".
一种解决方案是重复整个单词,然后删除最后一个字符,直到它达到与"foobarfoobar"之类的plainText相同的长度,然后删除字符"ar".
在java中有没有更好(或更优雅)的方法呢?
您的解决方案似乎是合理的,除了删除最后一个字符的方式 - 不要一次只做一个,只需使用子字符串或StringBuilder.setLength():
// Make sure we never have to expand...
StringBuilder builder = new StringBuilder(plainText.length() + key.length() - 1);
while (builder.length() < plainText.length()) {
builder.append(key);
}
builder.setLength(plainText.length());
String result = builder.toString();
Run Code Online (Sandbox Code Playgroud)
或者只是将附加调用更改为仅获得正确的大小:
StringBuilder builder = new StringBuilder(plainText.length());
while (builder.length() < plainText.length()) {
builder.append(key.substring(0, Math.min(key.length(),
builder.length() - plainText.length()));
}
String result = builder.toString();
Run Code Online (Sandbox Code Playgroud)
我个人更喜欢第一个 - 它更简单.