Разделение списка через пробел - PullRequest
10 голосов
/ 09 июля 2010

Это обычная задача, с которой я сталкиваюсь: разделить разделенный пробелами список на элемент head и массив, содержащий элементы tail .Например, учитывая эту строку:

the quick brown fox

Мы хотим:

"the"
["quick","brown","fox"]

.. в двух разных переменных.Первая переменная должна быть строкой, а вторая - массивом.Я ищу элегантный способ сделать это (желательно на Java).

Ответы [ 8 ]

27 голосов
/ 09 июля 2010

Для определенных значений элегантности:

String input = "The quick brown fox";
String[] elements = input.split(" ");
String first = elements[0];
String[] trailing = Arrays.copyOfRange(elements,1,elements.length);

Я не могу придумать, как сделать это с меньшим количеством кода ...

7 голосов
/ 09 июля 2010

Самым элегантным, вероятно, является использование String.split для получения String[], затем использование Arrays.asList для превращения его в List<String>.Если вам действительно нужен отдельный список за вычетом заголовка, просто используйте List.subList.

    String text = "the quick brown fox";
    List<String> tokens = Arrays.asList(text.split("\\s+"));

    String head = tokens.get(0);
    List<String> body = tokens.subList(1, tokens.size());

    System.out.println(head); // "the"
    System.out.println(body); // "[quick, brown, fox]"

    System.out.println(body.contains("fox")); // "true"
    System.out.println(body.contains("chicken")); // "false"

. Использование List позволяет использовать все богатые возможности, предоставляемые Java Collections Framework.

См. Также

1 голос
/ 09 июля 2010
public static void main(String[] args) {
        String s = "the quick brown fox";
        int indexOf = s.indexOf(' ');
        String head = s.substring(0, indexOf);
        String[] tail = s.substring(indexOf + 1).split(" +");
        System.out.println(head + " : " + Arrays.asList(tail));
    }

Было бы намного проще в Хаскеле:)

1 голос
/ 09 июля 2010
package playground;

import junit.framework.TestCase;

public class TokenizerTest extends TestCase {

    public void testTokenize() throws Exception {
        String s = "the quick brown fox";
        MyThing t = new MyThing(s);
        assertEquals("the", t.head);
        String[] rest = {"quick", "brown", "fox"};
        assertEqualArrays(rest, t.rest);
    }

    private static void assertEqualArrays(String[] a, String[] b) {
        assertEquals(a.length, b.length);
        for (int i = 0; i < a.length; i++) 
            assertEquals(a[i], b[i]);
    }

    private static class MyThing {
        private final String head;
        private final String[] rest;

        public MyThing(String s) {
            String[] array = s.split(" ");
            head = array[0];
            rest = new String[array.length - 1];
            System.arraycopy(array, 1, rest, 0, array.length - 1);
        }

    }
}
1 голос
/ 09 июля 2010

Вы можете использовать String#split(), принимая ограничение в качестве второго аргумента.

String text = "the quick brown fox";
String[] parts = text.split(" ", 2);
String headPart = parts[0];
String[] bodyParts = parts[1].split(" ");

System.out.println(headPart); // the
System.out.println(Arrays.toString(bodyParts)); // [quick, brown, fox]
1 голос
/ 09 июля 2010

Ну, вы получаете большую часть того, что вы хотите с

String[] pieces = "how now brown cow".split("\\s") 

или около того.Результатом будет массив строк.

Если вы действительно хотите, чтобы первый элемент отделился от остальных, вы можете сделать что-то вроде:

String head = pieces[0];
String[] tail = new String[pieces.length - 1];
System.arraycopy(pieces, 1, tail, 0, tail.length);

... done

0 голосов
/ 09 июля 2010
str= "the quick brown fox"
  pqr = str.split(" ")
0 голосов
/ 09 июля 2010

Используйте StringTokenizer и цикл while для перехода по каждому элементу. Внутри цикла вы можете получить первый элемент и поместить остальные в массив.

Редактировать: О, я думаю, StringTokenizer - это "устаревший" класс (хотя он все еще работает)

Рекомендуется использовать String.split () . Это даст вам строку [], содержащую ваши элементы. Оттуда должно быть тривиально получить первый элемент, а также создать массив из оставшихся элементов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...