package jetbrains.mps.core.tool.environment.common;
/*Generated by MPS */
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public class StringUtil {
public StringUtil() {
}
public static boolean endsWithIgnoreCase(@NonNls @NotNull String str, @NonNls @NotNull String suffix) {
final int stringLength = str.length();
final int suffixLength = suffix.length();
return stringLength >= suffixLength && str.regionMatches(true, stringLength - suffixLength, suffix, 0, suffixLength);
}
public static boolean startsWithChar(@Nullable CharSequence s, char prefix) {
return jetbrains.mps.util.StringUtil.startsWithChar(s, prefix);
}
public static boolean endsWithChar(@Nullable CharSequence s, char suffix) {
return jetbrains.mps.util.StringUtil.endsWithChar(s, suffix);
}
public static boolean startsWithConcatenationOf(String testee, String firstPrefix, String secondPrefix) {
int l1 = firstPrefix.length();
int l2 = secondPrefix.length();
if (testee.length() < l1 + l2) {
return false;
}
return testee.startsWith(firstPrefix) && testee.regionMatches(l1, secondPrefix, 0, l2);
}
@NotNull
public static String trimEnd(@NotNull String s, @NonNls @NotNull String suffix) {
if (s.endsWith(suffix)) {
return s.substring(0, s.length() - suffix.length());
}
return s;
}
public static boolean isEmptyOrSpaces(@Nullable final String s) {
return s == null || s.trim().length() == 0;
}
public static String replace(@NotNull final String text, @NotNull final String oldS, @Nullable final String newS, boolean ignoreCase) {
if (text.length() < oldS.length()) {
return text;
}
final String text1 = (ignoreCase ? text.toLowerCase() : text);
final String oldS1 = (ignoreCase ? oldS.toLowerCase() : oldS);
final StringBuilder newText = new StringBuilder();
int i = 0;
while (i < text1.length()) {
int i1 = text1.indexOf(oldS1, i);
if (i1 < 0) {
if (i == 0) {
return text;
}
newText.append(text, i, text.length());
break;
} else {
if (newS == null) {
return null;
}
newText.append(text, i, i1);
newText.append(newS);
i = i1 + oldS.length();
}
}
return newText.toString();
}
public static String replace(@NonNls @NotNull String text, @NonNls @NotNull String oldS, @NonNls @Nullable String newS) {
return StringUtil.replace(text, oldS, newS, false);
}
public static int compareVersionNumbers(String v1, String v2) {
if (v1 == null && v2 == null) {
return 0;
} else
if (v1 == null) {
return -1;
} else
if (v2 == null) {
return 1;
}
String[] part1 = v1.split("[\\.\\_\\-]");
String[] part2 = v2.split("[\\.\\_\\-]");
int idx = 0;
for (; idx < part1.length && idx < part2.length; idx++) {
String p1 = part1[idx];
String p2 = part2[idx];
int cmp;
if (p1.matches("\\d+") && p2.matches("\\d+")) {
cmp = new Integer(p1).compareTo(new Integer(p2));
} else {
cmp = part1[idx].compareTo(part2[idx]);
}
if (cmp != 0) {
return cmp;
}
}
if (part1.length == part2.length) {
return 0;
} else
if (part1.length > idx) {
return 1;
} else {
return -1;
}
}
}