Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем ql_Nik_lp, 19 июл 2015.

  1. Автор темы
    ql_Nik_lp

    ql_Nik_lp Старожил Девелопер Пользователь

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

    Den_Abr Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Экранируй
     
  4. Автор темы
    ql_Nik_lp

    ql_Nik_lp Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    Символ параграфа?
     
  5. serega6531

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
  6. Автор темы
    ql_Nik_lp

    ql_Nik_lp Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    Его нельзя экранировать. Или я в чем-то не прав...
    [​IMG][DOUBLEPOST=1437308866,1437308819][/DOUBLEPOST]"Мистика" заключается в том что если я ввожу туже самую строку, но напрямую - все работает отлично.
     
  7. JonBoss

    JonBoss Активный участник Пользователь

    Баллы:
    76
    Skype:
    ya_narik1
    Имя в Minecraft:
    Jon
    У меня нормально все разделяет. Вот мой тестовый код:
    Код:
    String s = "§11 §22 §33";
    for (String s1 : s.split("§"))
         p.sendMessage(s1);
    [​IMG][DOUBLEPOST=1437309871,1437309609][/DOUBLEPOST]Если ты знаешь точную позицию одного этого символа попробуй так:
    Код:
    String s = "§11 §22 §33";
    for (String s1 : s.split(s.charAt(НОМЕР СИМВОЛА)))
         p.sendMessage(s1);
     
  8. saharin94

    saharin94 Старожил Пользователь Заблокирован

    Баллы:
    173
    Skype:
    RikkiLooh
    Имя в Minecraft:
    RubukkitDniwe
    Сам экранирущий слеш надо экранировать.
     
  9. Den_Abr

    Den_Abr Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Pattern.quote("§")
     
  10. Автор темы
    ql_Nik_lp

    ql_Nik_lp Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    Еще раз говорю:
    Если я пишу 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
    То...
     
  11. Shevchik

    Shevchik Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    Это чтоли ты протоколом 1.1 пингуешь? Ну старее уж точно ничего нет.

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

    kirill2011s Старожил Пользователь

    Баллы:
    103
    split("\\§")
     
  13. Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    — вроде как далёк от того, чтобы быть служебным символом регулярок, а значит и экранироваться не обязан.
    Но конвертация в строку ужасна, да =) Слушай Шевчика.
     
  14. Автор темы
    ql_Nik_lp

    ql_Nik_lp Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    Всем спасибо. Буду пробовать.
    Потом отпишусь.
     

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