Untitled
unknown
plain_text
2 years ago
11 kB
11
Indexable
public class StringManipulation {
/**
* Returns the length of the input string.
*
* @param str The input string
* @return The length of the input string
*/
public static int length(String str) {
int count = 0;
for (char c : str.toCharArray()) {
count++;
}
return count;
}
/**
* Concatenates two strings together.
*
* @param str1 The first string
* @param str2 The second string
* @return The concatenated string
*/
public static String concat(String str1, String str2) {
char[] result = new char[length(str1) + length(str2)];
int index = 0;
for (char c : str1.toCharArray()) {
result[index] = c;
index++;
}
for (char c : str2.toCharArray()) {
result[index] = c;
index++;
}
return new String(result);
}
/**
* Returns a substring of the input string.
*
* @param str The input string
* @param beginIndex The starting index of the substring (inclusive)
* @param endIndex The ending index of the substring (exclusive)
* @return The substring of the input string
*/
public static String substring(String str, int beginIndex, int endIndex) {
StringBuilder result = new StringBuilder();
int count = 0;
for (char c : str.toCharArray()) {
if (count >= beginIndex && count < endIndex) {
result.append(c);
}
count++;
}
return result.toString();
}
/**
* Checks if the input string is empty or not.
*
* @param str The input string
* @return True if the input string is empty, false otherwise
*/
public static boolean isEmpty(String str) {
return length(str) == 0;
}
/**
* Replaces all occurrences of a specified old character with a new character in the input string.
*
* @param str The input string
* @param oldChar The old character to be replaced
* @param newChar The new character to replace the old character with
* @return The replaced string
*/
public static String replace(String str, char oldChar, char newChar) {
StringBuilder result = new StringBuilder();
for (char c : str.toCharArray()) {
if (c == oldChar) {
result.append(newChar);
} else {
result.append(c);
}
}
return result.toString();
}
/**
* Splits the input string into an array of substrings using the specified delimiter.
*
* @param str The input string
* @param delimiter The delimiter to split the string
* @return An array of substrings
*/
public static String[] split(String str, String delimiter) {
int count = 0;
for (int i = 0; i < length(str) - length(delimiter) + 1; i++) {
if (substring(str, i, i + length(delimiter)).equals(delimiter)) {
count++;
}
}
String[] result = new String[count + 1];
int index = 0;
int startIndex = 0;
int endIndex = 0;
while (endIndex < length(str)) {
if (substring(str, endIndex, endIndex + length(delimiter)).equals(delimiter)) {
result[index] = substring(str, startIndex, endIndex);
index++;
startIndex = endIndex + length(delimiter);
endIndex = startIndex;
} else {
endIndex++;
}
}
result[index] = substring(str, startIndex, endIndex);
return result;
}
/**
* Joins the elements of the input array into a single string using the specified delimiter.
*
* @param arr The input array
* @param delimiter The delimiter to join the elements
* @return The joined string
*/
public static String join(String[] arr, String delimiter) {
if (arr.length == 0) {
return "";
}
StringBuilder sb = new StringBuilder();
sb.append(arr[0]);
for (int i = 1; i < arr.length; i++) {
sb.append(delimiter).append(arr[i]);
}
return sb.toString();
}
/**
* Checks if two strings are equal regardless of the case sensitivity.
*
* @param str1 The first string
* @param str2 The second string
* @return True if the two strings are equal, false otherwise
*/
public static boolean equalsIgnoreCase(String str1, String str2) {
if (str1 == null || str2 == null) {
return str1 == str2;
}
if (str1.length() != str2.length()) {
return false;
}
for (int i = 0; i < str1.length(); i++) {
char c1 = str1.charAt(i);
char c2 = str2.charAt(i);
if (c1 != c2 && Character.toLowerCase(c1) != Character.toLowerCase(c2)) {
return false;
}
}
return true;
}
/**
* Returns the index of the first occurrence of a specified character in the input string.
*
* @param str The input string
* @param ch The character to be searched for
* @return The index of the first occurrence of the character, -1 if not found
*/
public static int indexOf(String str, char ch) {
for (int i = 0; i < length(str); i++) {
if (str.charAt(i) == ch) {
return i;
}
}
return -1;
}
/**
* Formats a string using the specified format and arguments.
*
* @param format The format string
* @param args The arguments to be substituted in the format string
* @return The formatted string
*/
public static String format(String format, Object... args) {
StringBuilder sb = new StringBuilder();
int i = 0;
int argIndex = 0;
while (i < format.length()) {
char c = format.charAt(i);
if (c == '{') {
if (i + 2 >= format.length() || format.charAt(i + 2) != '}') {
throw new IllegalArgumentException("invalid format");
}
char c2 = format.charAt(i + 1);
if (c2 == '0') {
String str = args[argIndex++] == null ? "null" : args[argIndex - 1].toString();
sb.append(str);
i += 3;
} else if (c2 == '1') {
int number = args[argIndex++] == null ? 0 : ((Number) args[argIndex - 1]).intValue();
sb.append(number);
i += 3;
} else {
throw new IllegalArgumentException("invalid format");
}
} else {
sb.append(c);
i++;
}
}
return sb.toString();
}
/**
* Checks if the input string starts with the specified prefix.
*
* @param str The input string
* @param prefix The prefix to be checked
* @return True if the input string starts with the prefix, false otherwise
*/
public static boolean startsWith(String str, String prefix) {
if (length(prefix) > length(str)) {
return false;
}
for (int i = 0; i < length(prefix); i++) {
if (str.charAt(i) != prefix.charAt(i)) {
return false;
}
}
return true;
}
/**
* Checks if the input string ends with the specified suffix.
*
* @param str The input string
* @param suffix The suffix to be checked
* @return True if the input string ends with the suffix, false otherwise
*/
public static boolean endsWith(String str, String suffix) {
if (length(suffix) > length(str)) {
return false;
}
int strIndex = length(str) - 1;
int suffixIndex = length(suffix) - 1;
while (suffixIndex >= 0) {
if (str.charAt(strIndex) != suffix.charAt(suffixIndex)) {
return false;
}
suffixIndex--;
strIndex--;
}
return true;
}
/**
* Converts the input string to lowercase.
*
* @param str The input string
* @return The lowercase string
*/
public static String toLowercase(String str) {
StringBuilder result = new StringBuilder();
for (char c : str.toCharArray()) {
if (c >= 'A' && c <= 'Z') {
result.append((char) (c - 'A' + 'a'));
} else {
result.append(c);
}
}
return result.toString();
}
/**
* Converts the input string to uppercase.
*
* @param str The input string
* @return The uppercase string
*/
public static String toUppercase(String str) {
StringBuilder result = new StringBuilder();
for (char c : str.toCharArray()) {
if (c >= 'a' && c <= 'z') {
result.append((char) (c - 'a' + 'A'));
} else {
result.append(c);
}
}
return result.toString();
}
/**
* Removes leading and trailing whitespaces from the input string.
*
* @param str The input string
* @return The trimmed string
*/
public static String trim(String str) {
int startIndex = 0;
while (startIndex < length(str) && str.charAt(startIndex) == ' ') {
startIndex++;
}
int endIndex = length(str) - 1;
while (endIndex >= 0 && str.charAt(endIndex) == ' ') {
endIndex--;
}
return substring(str, startIndex, endIndex + 1);
}
/**
* Compares two strings lexicographically.
*
* @param str1 The first string
* @param str2 The second string
* @return The value 0 if the two strings are equal; a value less than 0 if the first string is lexicographically less
* than the second string; a value greater than 0 if the first string is lexicographically greater than the second
* string
*/
public static int compareTo(String str1, String str2) {
int len1 = length(str1);
int len2 = length(str2);
int lim = Math.min(len1, len2);
for (int k = 0; k < lim; k++) {
char c1 = str1.charAt(k);
char c2 = str2.charAt(k);
if (c1 != c2) {
return c1 - c2;
}
}
return len1 - len2;
}
}Editor is loading...
Leave a Comment