Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Помогите Мистика со split()

ql_Nik_lp

Старожил
Девелопер
Пользователь
Баллы
173
Имя в Minecraft
ql_Nik_lp
Доброго времени суток, господа.
Получаю MOTD сервера через пинг-пакет, разбираю по байтам - получаю такого вида cтроку
<Test Motd/>§0§20
Как видим - разделителем тут является символ параграфа '§'
Содержимое - ни что иное как MOTD§ONLINE§MAX
И вроде все элементарно - split("§") да и все, но тут начинается магия.
contains("§") на полученную строку дает мне false, а в результате split получаю массив с этой же строкой.
Номера символов сравнивал - 167.
Что за магия - без понятия.
 
Его нельзя экранировать. Или я в чем-то не прав...
e17b998a6a.jpg

"Мистика" заключается в том что если я ввожу туже самую строку, но напрямую - все работает отлично.
 
Доброго времени суток, господа.
Получаю MOTD сервера через пинг-пакет, разбираю по байтам - получаю такого вида cтроку
<Test Motd/>§0§20
Как видим - разделителем тут является символ параграфа '§'
Содержимое - ни что иное как MOTD§ONLINE§MAX
И вроде все элементарно - split("§") да и все, но тут начинается магия.
contains("§") на полученную строку дает мне false, а в результате split получаю массив с этой же строкой.
Номера символов сравнивал - 167.
Что за магия - без понятия.
У меня нормально все разделяет. Вот мой тестовый код:
Код:
String s = "§11 §22 §33";
for (String s1 : s.split("§"))
     p.sendMessage(s1);
BRMZ4ojL0Po.jpg

Если ты знаешь точную позицию одного этого символа попробуй так:
Код:
String s = "§11 §22 §33";
for (String s1 : s.split(s.charAt(НОМЕР СИМВОЛА)))
     p.sendMessage(s1);
 
Его нельзя экранировать. Или я в чем-то не прав...
e17b998a6a.jpg

"Мистика" заключается в том что если я ввожу туже самую строку, но напрямую - все работает отлично.
Сам экранирущий слеш надо экранировать.
 
У меня нормально все разделяет. Вот мой тестовый код:
Еще раз говорю:
Если я пишу String s = "bla§bla" - все работает отлично.
Но если строку я считываю
Код:
            int b;
            StringBuffer str = new StringBuffer();
            while ((b = in.read()) != -1) {
                if (b != 0 && b > 16 && b != 255 && b != 23 && b != 24) {
                    str.append((char) b);
                }
            }
            str.toString
То...
 
Это чтоли ты протоколом 1.1 пингуешь? Ну старее уж точно ничего нет.

А вообще экранировать надо, split понимаешь ли regex принимает, поэтому если хочешь гарантированно поделить по симолу то экранируй скобочками []
И ещё твой метод считывания не торт, у String специально есть конструктор принимающий набор байт и кодировку, не конверть напрямую в чарки, юникод проебёшь.
 
Всем спасибо. Буду пробовать.
Потом отпишусь.
 

Поделиться этой страницей

Назад
Верх