2012-06-13 2 views
1

Я новичок в программировании на Java. Я хочу написать простой сетевой протокол Java. Я хочу послать эту строку в удаленном хосте Java, например:Как извлечь строки

230 computer delete reboot exit 

Проблема, которую я не могу решить, как я могу извлечь Струны один за другим и поместить его в массив? И самой большой загадкой для меня является то, как я это делаю, если у меня есть строки разной длины? Благодарим за помощь!

PS: Могу ли я посылать сразу весь массив не только простых строк?

PS 2: Что делать, если у меня есть сервер Java и клиент C? Насколько известно, для обмена данными между обеими сторонами могут использоваться только строки?

+0

Я не могу говорить о отправке на удаленный Java-хост, но можно преобразовать строку в массив с помощью функции '.split()'. '" 230 удалять перезагрузку компьютера ".split (" \\ s + ")' разделит вашу строку пробелом на массив из 5 элементов. – Ina

+1

Вы еще этого не знаете, но это не ваша * самая большая проблема ... –

+2

Не могли бы вы поделиться своим опытом? – user1285928

ответ

5

Вы можете:

  1. Split строки, используя метод String.split

    String text = "230 computer delete reboot exit"; 
    String[] split = text.split("\\s"); 
    
  2. Использование Pattern и Matcher

    String text = "230 computer delete reboot exit"; 
    Pattern p = Pattern.compile("(.*)\\s+(.*)\\s+(.*)\\s+(.*)\\s+(.*)"); 
    Matcher m = p.matcher(text); 
    if (m.matches()) { 
        String first = m.group(1); 
        String second = m.group(2); 
        .... 
    
  3. Использование Scanner класса

    Scanner s = new Scanner(text); 
    int firstNumber = s.nextInt(); // 230 
    String secondText = s.next(); // computer 
    .... 
    

Второй и третий выбор может быть выше, если прочитать материал из потока.

Или какой-то другой способ ... :)

+0

+1 лучше, чем мой! –

+0

Еще один вопрос: если я хочу подключить Java-сервер и клиент C, каков наиболее выборный способ обмена данными? Строки? – user1285928

+0

Определите бинарный или текстовый протокол. В вашем случае вы можете начать с строк, точно так же, как вы определили в своем вопросе. – dacwe

4
String input = "230 computer delete reboot exit"; 
String s[] = input.split("\\s+"); 

// now s[0] = 230 s[1] = computer 

Подробнее о String.split().

И регулярное выражение, используемое здесь \\s+, равно любому пробелу. Прочтите this для получения дополнительной информации.

3

Вы можете отправить напрямую массив, используя сериализацию через ObectInputStream и ObjectOutputStream.

Но я предлагаю вам использовать свои собственные классы для инкапсуляции сообщений. Например:

class NetworkMessage { 
    int code; 
    String param1; 
    String param2; 
    .. 
} 

Так, чтобы это было более объектно-ориентированное и структурированное. Отправка только строк не является хорошим дизайном, особенно если протокол растет по сложности.

Что касается разделения цепочки, используйте метод String.split(String regex), но это нехорошее решение.