Skip to content

Commit

Permalink
Optimize StringBuilder.
Browse files Browse the repository at this point in the history
  • Loading branch information
lukechen116 committed Oct 19, 2023
1 parent c56e0bd commit a59175b
Showing 1 changed file with 10 additions and 11 deletions.
21 changes: 10 additions & 11 deletions src/main/java/org/sqids/Sqids.java
Original file line number Diff line number Diff line change
Expand Up @@ -124,22 +124,20 @@ private String encodeNumbers(List<Long> numbers, int increment) {
offset %= this.AlphabetLength;
offset = (offset + increment) % this.AlphabetLength;

String alphabet = this.Alphabet.substring((int) offset) + this.Alphabet.substring(0, (int) offset);
char prefix = alphabet.charAt(0);
alphabet = new StringBuilder(alphabet).reverse().toString();
StringBuilder idBuilder = new StringBuilder().append(prefix);
StringBuilder alphabetB = new StringBuilder(this.Alphabet.substring((int) offset)).append(this.Alphabet, 0, (int) offset);
char prefix = alphabetB.charAt(0);
String alphabet = alphabetB.reverse().toString();
StringBuilder id = new StringBuilder().append(prefix);
int numberSize = numbers.size();
for (int i = 0; i < numberSize; i++) {
long num = numbers.get(i);
idBuilder.append(toId(num, alphabet.substring(1)));
id.append(toId(num, alphabet.substring(1)));
if (i < numberSize - 1) {
idBuilder.append(alphabet.charAt(0));
id.append(alphabet.charAt(0));
alphabet = shuffle(alphabet);
}
}

StringBuilder id = new StringBuilder(idBuilder.toString());

if (this.MinLength > id.length()) {
id.append(alphabet.charAt(0));
while (this.MinLength - id.length() > 0) {
Expand All @@ -149,7 +147,8 @@ private String encodeNumbers(List<Long> numbers, int increment) {
}

if (isBlockedId(id.toString())) {
id = new StringBuilder(encodeNumbers(numbers, increment + 1));
id.setLength(0);
id.append(encodeNumbers(numbers, increment + 1));
}

return id.toString();
Expand All @@ -168,7 +167,7 @@ private String shuffle(String alphabet) {
return new String(chars);
}

private String toId(long num, String alphabet) {
private StringBuilder toId(long num, String alphabet) {
StringBuilder id = new StringBuilder();
char[] chars = alphabet.toCharArray();
int charLength = chars.length;
Expand All @@ -178,7 +177,7 @@ private String toId(long num, String alphabet) {
num /= charLength;
} while (num > 0);

return id.reverse().toString();
return id.reverse();
}

private long toNumber(String id, String alphabet) {
Expand Down

0 comments on commit a59175b

Please sign in to comment.