Разделить строку в Java

#java

#java

Вопрос:

Я использую команду Java exec для выдачи команды «hcitool scan» для выполнения сканирования Bluetooth.

Выходные данные представлены в точно таком же формате, как если бы я вводил команду в терминал

 scanning...
mac address      bluetoothName
Done
  

Я хочу иметь возможность разбивать возвращаемую строку на части, чтобы я мог сохранить найденные MAC-адреса в виде строки.

Мой код на данный момент выглядит следующим образом:

 import java.io.*;

public class altBluetooth
{
  public static void main(String args[])
  {
    try
    {
      Process p=Runtime.getRuntime().exec("hcitool scan");
      p.waitFor();
      BufferedReader reader=new BufferedReader(new InputStreamReader(p.getInputStream()));
      String line=reader.readLine();

      while(line!=null)
      {
        System.out.println(line);
        line=reader.readLine();
      }
    }
    catch(IOException e1) {
      System.out.print("This didnt work - exception 1");
    }
    catch(InterruptedException e2) {
      System.out.print("This didnt work - exception 2");
    }

    System.out.println("Done");
  }
} 
  

Комментарии:

1. Не похоже, что вы даже пытались. Вы ведь знаете, что у String этого есть метод split , верно? Перестаньте лениться и делайте все своими руками.

2. у вас есть более подробная информация о точном выводе строк? разделены ли они табуляцией? просто пробел? может ли быть пробел внутри какого-либо из полей?

3. String.split() должно сработать. Возможно, вы захотите прочитать о регулярных выражениях. Я также рекомендую ознакомиться с документацией по Java или отличной книгой «Мышление на Java». Основы (и многое другое) описаны там.

4. Обратите внимание, что p.waitFor() может никогда не завершиться, если вы сразу не начнете считывать выходные данные. Если выходные данные hcitool scan становятся слишком большими, внутренний буфер вывода ОС может заблокироваться!

5. Вывод разделен табуляцией — я хочу отказаться от имени Bluetooth и сохранить только MAC-адрес. Я дам ответ, попробовав.

Ответ №1:

 String[] parts = line.split("\s ");
  

вероятно

Ответ №2:

Если вам нужно расширенное разделение, вы можете использовать com.google.common.base.Splitter из Google Guava