mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
sanitizeFileName — don't create stringBuilder/string if name is sanitized
This commit is contained in:
@@ -1053,21 +1053,40 @@ public class FileUtil extends FileUtilRt {
|
||||
*/
|
||||
@NotNull
|
||||
public static String sanitizeFileName(@NotNull String name) {
|
||||
StringBuilder result = new StringBuilder();
|
||||
|
||||
for (int i = 0; i < name.length(); i++) {
|
||||
final char ch = name.charAt(i);
|
||||
|
||||
if (ch > 0 && ch < 255) {
|
||||
if (Character.isLetterOrDigit(ch)) {
|
||||
result.append(ch);
|
||||
}
|
||||
else {
|
||||
result.append("_");
|
||||
StringBuilder result = null;
|
||||
int last = 0;
|
||||
int length = name.length();
|
||||
for (int i = 0; i < length; i++) {
|
||||
char c = name.charAt(i);
|
||||
boolean appendReplacement = true;
|
||||
if (c > 0 && c < 255) {
|
||||
if (Character.isLetterOrDigit(c) || c == '_') {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
else {
|
||||
appendReplacement = false;
|
||||
}
|
||||
|
||||
if (result == null) {
|
||||
result = new StringBuilder();
|
||||
}
|
||||
if (last < i) {
|
||||
result.append(name, last, i);
|
||||
}
|
||||
if (appendReplacement) {
|
||||
result.append('_');
|
||||
}
|
||||
last = i + 1;
|
||||
}
|
||||
|
||||
if (result == null) {
|
||||
return name;
|
||||
}
|
||||
|
||||
if (last < length) {
|
||||
result.append(name, last, length);
|
||||
}
|
||||
return result.toString();
|
||||
}
|
||||
|
||||
|
||||
@@ -24,7 +24,6 @@ import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.containers.Convertor;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.StringReader;
|
||||
import java.util.Arrays;
|
||||
@@ -32,6 +31,8 @@ import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import static org.hamcrest.CoreMatchers.equalTo;
|
||||
import static org.hamcrest.CoreMatchers.sameInstance;
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
public class FileUtilLightTest {
|
||||
@@ -198,4 +199,18 @@ public class FileUtilLightTest {
|
||||
String expected = SystemInfo.isWindows ? "~\\relative" : "~/relative";
|
||||
assertEquals(expected, FileUtil.getLocationRelativeToUserHome(SystemProperties.getUserHome() + "/relative", false));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void sanitizeFileName() {
|
||||
String newS = "tmp";
|
||||
assertThat(FileUtil.sanitizeFileName(newS), sameInstance(newS));
|
||||
assertThat(FileUtil.sanitizeFileName("_test"), sameInstance("_test"));
|
||||
|
||||
assertThat(FileUtil.sanitizeFileName(" "), equalTo("_"));
|
||||
assertThat(FileUtil.sanitizeFileName("\u2026"), equalTo(""));
|
||||
assertThat(FileUtil.sanitizeFileName("q_test"), sameInstance("q_test"));
|
||||
assertThat(FileUtil.sanitizeFileName("12_"), sameInstance("12_"));
|
||||
assertThat(FileUtil.sanitizeFileName("12_ 123"), equalTo("12___123"));
|
||||
assertThat(FileUtil.sanitizeFileName(" 12\u2026123"), equalTo("_12123"));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user