#java #string #function #split
#java #строка #функция #разделить
Вопрос:
У меня есть:
1234 2345 3456 4567
Когда я пытаюсь String.split(" ",2)
, я получаю:
{1234} , {2345 3456 4567}
Но мне нужно:
{1234},{2345}
Мне нужны только первые два элемента. Как мне реализовать это на Java?
Заранее спасибо.
РЕДАКТИРОВАТЬ: это всего лишь одна строка огромного набора данных.
Комментарии:
1. Как насчет разделения на каждый пробел и после взятия только первых 2 элементов результирующего массива?
2. Это было бы немного менее эффективно. Я уже подумал об этом.
3. по пространству или по времени? Иногда я предпочитаю отказываться от эффективности вместо того, чтобы изобретать weel
4. С точки зрения пробела и «кода».
Ответ №1:
Я предполагаю, что вам нужны первые две строки, затем выполните следующие действия:
String[] res = Arrays.copyOfRange(string.split(" "), 0, 2);
Ответ №2:
Вы можете сделать это:-
String[] s=string.split("");
s[2]=null;
s[3]=null;
Теперь у вас есть только {1234},{2345}
ИЛИ, что лучше, разделите саму строку, а затем примените split()
String s=string.substring(string.indexOf("1"),string.indexOf("5") 1);// 1 for including the 5
s.split(" ");
Ответ №3:
У вас есть какие-либо варианты, один из которых — выполнить разделение и скопировать первые 2 результата.
Следующий код имеет следующий вывод:
Первые два:
1234
2345
public static void main(String[] args) {
String input="1234 2345 3456 4567";
String[] parts= input.split(" ");
String[] firstTwoEntries = Arrays.copyOf(parts, 2);
System.out.println("First two: ");
System.out.println("----------");
for(String entry:firstTwoEntries){
System.out.println(entry);
}
System.out.println("----------");
}
Другой способ — заменить исходную строку регулярным выражением и после выполнить разделение:
Результат следующего кода (мы заменяем пробел на «:»:
Отфильтровано: 1234:2345
Первые два:
1234
2345
public static void main(String[] args) {
String input="1234 2345 3456 4567";
//we find first 2 and separate with :
String filteredInput= input.replaceFirst("^([^\s]*)\s([^\s]*)\s.*$", "$1:$2");
System.out.println("Filtered: " filteredInput);
String[] parts= filteredInput.split(":");
System.out.println("First two: ");
System.out.println("--------");
for(String part:parts){
System.out.println(part);
}
System.out.println("--------");
}
Ответ №4:
String input="1234 5678 9012 3456";
String[] result=Arrays.copyOf(input.split(" "),2);
должно работать
Ответ №5:
Самый простой (но не самый быстрый) способ — сначала разделить строку
String test = "123 2345 3456 4567"
String[] splitted = test.split(" ");
и фрагмент результирующего массива:
String[] result = Arrays.copyOfRange(splitted, 2);
Это будет хорошо работать в большинстве случаев. Единственная проблема может заключаться в том, что промежуточный массив становится действительно огромным. Тогда у вас будет много промежуточной памяти, которую сборщик мусора должен очистить. Но с современными оптимизациями (например, escape-анализ) даже это может не оказать большого влияния на производительность.
Ответ №6:
- Найдите подстроку, содержащую то, что вы хотите, вызвав
indexOf
дважды. - Используйте
split()
только для этой подстроки.
Вот одно альтернативное решение, которое использует только indexOf
и substring
.
public class Program{
public static void main(String[] args) {
String input = "1234 2345 3456 4567";
int firstIndex = input.indexOf(" ");
int secondIndex = input.indexOf(" ", firstIndex 1);
String[] output = new String[] {input.substring(0, firstIndex),
input.substring(firstIndex 1, secondIndex)};
System.out.println(output[0]);
System.out.println(output[1]);
}
}
Вывод:
1234
2345
Комментарии:
1. Я знаю, я думал об этом, но есть ли более простое решение?
2. @kaushaya, не совсем, нет. Насколько я знаю, для этого нет библиотечной функции.
3. @kaushaya, я только что добавил второе решение, которое вообще не использует string.split . Если вы заботитесь о скорости, вам, вероятно, следует сравнить это с тем, который выполняет
split
последующее,Arrays.copyOfRange()
и использовать тот, который быстрее.
Ответ №7:
Другим однострочным решением было бы:
Предположим, у вас есть это:
String a="1234 2343545 356 88";
Таким образом, однострочная команда будет:
String b[]=a.substring(0,a.indexOf(" ",a.indexOf(" ") 1)).split(" ");
Теперь у вас есть «b» в виде массива из двух первых вхождений:
b[0] //1234
b[1] //2343545