Код: Выделить всё
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
class MyTests {
private static final Logger LOGGER = LoggerFactory.getLogger(MyTests.class);
protected String getSaltString(final int length) {
String SALTCHARS = "ABCDEFGHIJKLMNOPQRSTUVWXY\nZ1234567890";
StringBuilder salt = new StringBuilder();
Random rnd = new Random();
while (salt.length() < length) { // length of the random string.
int index = (int) (rnd.nextFloat() * SALTCHARS.length());
salt.append(SALTCHARS.charAt(index));
}
String saltStr = salt.toString();
return saltStr;
}
private void dummy(final String str) {
}
@Test
public void testNewlineInString() {
long start = 0, end = 0;
final int Times = 1000;
LOGGER.info("starting..");
String [] strings = new String[Times];
for (int i = 0; i < Times; ++i) {
strings[i] = getSaltString(100);
}
LOGGER.info("Generated strings..");
start = Instant.now().toEpochMilli();
for (int i = 0; i < Times; ++i) {
LOGGER.info("Case 1: String Number: {} Name: {}", i + 1, strings[i]);
// dummy(strings[i]);
}
end = Instant.now().toEpochMilli();
final long durationNo_escapeJava = end - start;
start = Instant.now().toEpochMilli();
for (int i = 0; i < Times; ++i) {
LOGGER.info("Case 2: String Number: {} Name: {}", i + 1, StringEscapeUtils.escapeJava(strings[i]));
// dummy(StringEscapeUtils.escapeJava(strings[i]));
}
end = Instant.now().toEpochMilli();
final long duration_escapeJava = end - start;
start = Instant.now().toEpochMilli();
for (int i = 0; i < Times; ++i) {
LOGGER.info("Case 3: String Number: {} Name: {}", i + 1, strings[i]);
// dummy(strings[i]);
}
end = Instant.now().toEpochMilli();
final long durationNo_escapeJavaAgain = end - start;
LOGGER.info("durationNo_escapeJava: {} duration_escapeJava: {} durationNo_escapeJavaAgain: {}",
durationNo_escapeJava, duration_escapeJava, durationNo_escapeJavaAgain);
}
}
< /code>
Результат последовательно показывает, что первый блок занимает гораздо больше, чем 3 -й блок, который по существу одинаково. < /p>
Например: < /p>
durationno_escapejava: 265 durent_escapejava: 107 DurationNo_escapejavaagain: 28 < /p> p> PROUTION
PROMENTAGAVAAGAIN: PRINUTY_ESCAPEJAVA. Dumy Подробнее здесь: https://stackoverflow.com/questions/795 ... erformance