Разделить строку по символу в Java - PullRequest
13 голосов
/ 14 марта 2011

Я получаю строку из Интернета, которая выглядит следующим образом:

Latest Episode@04x22^Killing Your Number^May/15/2009

Тогда мне нужно хранить 04x22, Killing Your Number и May/15/2009 в переменных, но это не сработает.

String[] all = inputLine.split("@");
String[] need = all[1].split("^");
show.setNextNr(need[0]);
show.setNextTitle(need[1]);
show.setNextDate(need[2]);

Теперь он хранит только NextNr со всей строкой

04x22^Killing Your Number^May/15/2009

Что не так?

Ответы [ 5 ]

32 голосов
/ 14 марта 2011

String.split(String regex)

Аргумент является регулярным выражением, и ^ имеет там особое значение; "привязка к началу"

Вам нужно сделать:

String[] need = all[1].split("\\^");

Избегая ^, вы говорите: «Я имею в виду персонажа« ^ »»

22 голосов
/ 14 марта 2011

Если у вас есть разделитель, но вы не знаете, содержит ли он специальные символы, вы можете использовать следующий подход

String[] parts = Pattern.compile(separator, Pattern.LITERAL).split(text);
7 голосов
/ 15 августа 2013

Используя гуаву, вы можете сделать это элегантно и быстро:

private static final Splitter RECORD_SPLITTER = Splitter.on(CharMatcher.anyOf("@^")).trimResults().omitEmptyStrings();

...

Iterator<String> splitLine = Iterables.skip(RECORD_SPLITTER.split(inputLine), 1).iterator();

show.setNextNr(splitLine.next());
show.setNextTitle(splitLine.next());
show.setNextDate(splitLine.next());
1 голос
/ 05 августа 2015
String input = "Latest Episode@04x22^Killing Your Number^May/15/2009";

//split will work for both @ and ^
String splitArr[] = input.split("[@\\^]");

/*The output will be,
 [Latest Episode, 04x22, Killing Your Number, May/15/2009]
*/
System.out.println(Arrays.asList(splitArr));
1 голос
/ 05 августа 2015
public static String[] split(String string, char separator) {
    int count = 1;
    for (int index = 0; index < string.length(); index++)
        if (string.charAt(index) == separator)
            count++;
    String parts[] = new String[count];
    int partIndex = 0;
    int startIndex = 0;
    for (int index = 0; index < string.length(); index++)
        if (string.charAt(index) == separator) {
            parts[partIndex++] = string.substring(startIndex, index);
            startIndex = index + 1;
        }
    parts[partIndex++] = string.substring(startIndex);
    return parts;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...