2010-02-04 4 views
0

Предположим, у вас есть String[], который был создан после того, как .split(), который затем заставляет вас иметь кучу пустых строк там, т.е.Java: Удаление элементов из массива после .split()

myArray['','hello','thetimes','economist','','','hi'] 

Есть ли способ удалить их из String[] без необходимости округлять круг, обнаруживая, что строка пуста, а затем добавляется в новый массив?

ответ

3

Есть ли способ, чтобы удалить их из String [] без округлять петлю, обнаружения, если строка пуста, то добавить в новый массив?

No. Массивы имеют фиксированную длину.

8

Здесь есть более простой способ.

String.split("\\s+") устранит эти пустые строки.

+0

Вы не можете ссылаться на '.split()' на 'String []'. Я уже разделил свой массив на определенную строку, например 'String [] hello = someString.split ('abc');', я не могу затем выполнить '.split()' on 'hello []' , Или ... может быть, я тебя не понимаю? – Federer

+1

@ theEconomist: Нет, вы вызываете '.split()' на 'String'. Параметр regex указывает на разметку шаблона. Этот конкретный шаблон, который я назвал, соответствует «одному или нескольким символам пробелов», что устраняет пустые 'String' в результирующем массиве. – danben

+0

@ theEconomist: Кроме того, если вы раскалываете больше, чем пробелы, вы можете расширить свое регулярное выражение, включив в него окружающие пробелы. Например, 'someString.split ('abc') 'станет' someString.split (\\ s * abc \\ s *) '. – danben

0

Возможно, проще всего преобразовать его в List, перебрать его и удалить пустые элементы, например.

List<String> parts = new LinkedList<String>(string.split(pattern)); 
for (Iterator<String> it = parts.iterator(); 
    it.hasNext(); 
    ) { 
    if (it.next().isEmpty()) { 
     it.remove(); 
    } 
} 
return parts.toArray(new String[parts.size()]); 
+0

После раскола не будет пустой строки! – fastcodejava

0
String[] parts = string.split("\\s*" + splitString + "\\s*"); 

Где splitString это строка, на которой вы были первоначально расщепление.

Это расширяет разделяемую строку, добавляя любое число количества пробелов к нему, так что они реализуются как часть сплиттера, а не часть результирующего массива.

0

Настоящая проблема заключается в вашей строке регулярного выражения, которая выполняет разделение. Посмотрите here на список специальных обозначений, которые можно добавить, как и другие, например, \\s.

Если вы хотите перейти к более легкому маршруту, чем изучать регулярное выражение, вы можете просто перебирать массив и добавлять каждую непустую строку в ArrayList<String>, а затем менять его обратно на массив фиксированного размера.

0

Нет простого метода удаления элементов из массива. Вы можете сделать replaceAll(), а затем позвонить split или позвонить по номеру split("\\s+") с несколькими местами.

1

Решения разрешают только часть проблемы - удаляют только завершающие пустые строки. я использовал:

String st = "a,b,c,,d,,f,,,"; 
List<String> list = Arrays.asList(st.split("\\s*,\\s*")); 
while (list.remove("")); 
2

Вот это правильный путь MAGIC:

String str = "1, 2,3 4,, , ,5,,6, ,"; 
String arr[] = str.split("(\\s*,\\s*)+"); 
+0

Пример вывода будет весьма полезен. – Trevor

Смежные вопросы