2014-01-26 3 views
0

У меня есть два типа струнногоРазделить строку с Явой

command1|Destination-IP|DestinationPort 
Command2|Destination-IP|DestinationPort|SourceIP|SourcePort|message 

Я попытался разбить строку, чтобы получить переменные я начал программировать, как это, но не уверен, что это лучший способ

public String dstIp=""; 
    public String dstPort=""; 
    public String srcIp=""; 
    public String scrPort=""; 
    public String message=""; 
    public String command=""; 

int first = sentence.indexOf ("|"); 


       if (first > 0) 
       { 

        int second = sentence.indexOf("|", first + 1); 
        int third = sentence.indexOf("|", second + 1); 

       command = sentence.substring(0,first); 
       dstIp= sentence.substring(first+1,second); 
       dstPort= sentence.substring(second+1,third); 

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

command1|Destination-IP|DestinationPort 

Я получаю сообщение об ошибке, потому что есть нет третьего |

+2

'myStr.split (" \\ | ");' Или 'myStr.split (Pattern.quote (" | "));'. – Maroun

+0

Вы также можете использовать один из [StringUtils.split] (http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html#split (java.lang. String)) из apache commons, например 'StringUtils.split (предложение, '|')' –

ответ

5

Лучше разделить ваш вход с помощью символа трубы здесь:

String[] tokens = sentence.split("[|]"); // or sentence.split("\\|") 

Затем проверьте # лексем путем проверки tokens.length и действовать соответствующим образом.

0

Используйте функцию Java split(), которая управляет именно тем, что вы ищете!

Пример кода:

String test = "bla|blo|bli"; 
String[] result = test.split("\\|"); 
+0

Вы могли бы также использовать функцию поиска: см. Http://stackoverflow.com/questions/2198373/java-how-to-split-a-string-on- плюс-знаки – PrR3

0

Использование split с \\| в качестве аргумента. Он возвращает String[], который будет иметь разные части строки -split.

+1

Нет, '|' должно быть экранировано. – Maroun

5

Посмотрите на String.split метод:

String line = "first|second|third"; 
String[] splitted = line.split("\\|"); 
for (String part: splitted) { 
    System.out.println(part); 
} 

примечание стороны: с "|" имеет специальное значение (в основном "|" средства или) в регулярном выражении syntax, следует избавиться от нее с обратной косой черты ,

На самом деле довольно интересно посмотреть на результаты неизученной версии "first|second|third".split("|").

Регулярное выражение "|" переводит на английский язык как «пустую строку или пустую строку» и соответствует строке в любой позиции. "first|second|third".split("|") возвращает массив длиной 19: {"", "f", "i", "r", ..., "d"}

Смежные вопросы