Функция аля Split
Напишите функцию, которая принимает строку и возвращает массив слов.
Под словом подразумеваются множество символов отличных от пробела. Между словами может стоять больше одного пробела.
Максимальная длина строки 10^6 символов. Сигнатура функции
Название функции: split.
Параметры: String s.
Возвращаемый тип: String[].
Пример:
Входные данные:
s = "Any TexSt";
Выходные данные:
result = [ "Any", "TexSt" ];
public static String[] split(String s) {
int count = 0;
char[] c = s.toCharArray();
for (int i = 0; i < c.length - 1; i++) {
if (i == 0 && (int) c[i] <= 127 && (int) c[i] != 32 || (int) c[i] == 32 && (int) c[i + 1] <= 127 && (int) c[i + 1] != 32) {
count++;
}
}
String temp = "";
int k = 0;
String[] result = new String[count];
for (int i = 0; i < c.length; i++) {
if ((int) c[i] != 32) {
result[k] = temp;
temp = temp + c[i];
result[k] = temp;
}
}
return result;
}
Здравствуйте.Выше описаны условия задачи.Создать некое подобие функции сплит.Застрял на том моменте,что не могу получить результат в n-количестве слов.Экспериментировал очень много,дебажил. На платформе очень много тестов. например входные данные могут быть и такими :
" t test tes t"
Вот ,тот код ,каким я решил на платформе.Его я нашел (естественно).
public static String[] split(String s) {
ArrayList<String> words = new ArrayList<>();
StringBuilder currentWord = new StringBuilder();
for (Character letter : s.toCharArray()) {
if (letter.equals(' ')) {
if (currentWord.length() > 0) {
words.add(currentWord.toString());
currentWord = new StringBuilder();
}
} else {
currentWord.append(letter);
}
}
if (currentWord.length() > 0) {
words.add(currentWord.toString());
}
String[] wordsArr = words.toArray(String[]::new);
return wordsArr;
}
Ответы (1 шт):
Вот как альтернативный пример. Проматываем все пробелы, потом забираем слово и так по кругу.
public static String[] split(String s) {
ArrayList<String> result = new ArrayList<>();
int ind = 0;
while (ind < s.length())
{
while (ind < s.length() && s.charAt(ind) == ' ') ind++;
int start = ind;
while (ind < s.length() && s.charAt(ind) != ' ') ind++;
if (start != ind)
result.add(s.substring(start, ind));
}
return result.toArray(new String[result.size()]);
}